référence non définie à `pthread_key_create '(erreur de l'éditeur de liens)
J'ai téléchargé gtest 1.7.0 sources à partir d'ici:
https://code.google.com/p/googletest/downloads/list
et de construire la gtest .un des fichiers (fichiers lib) sur ubuntu 13.10:
Linux ubuntu 3.11.0-15-generic #23-Ubuntu SMP Mon Dec 9 18:17:04 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
et la lib est appelé: libgtest.a
. Dans mon main.cpp fichier:
#include <iostream>
#include "gtest/gtest.h"
int main(){
std::cout << "Test \n";
int argc = 2;
char* cp01;
char* cp02;
char* argv[] = {cp01, cp02};
testing::InitGoogleTest(&argc, argv);
return 0;
}
À partir d'un terminal-je construire avec:
g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lpthread -lgtest
qui donne les erreurs suivantes:
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_key_create'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_getspecific'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_key_delete'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_setspecific'
collect2: error: ld returned 1 exit status
Sur cette base:
erreur lors de la prise de GTest
J'ai aussi essayé de -pthread
au lieu de -lpthread
mais donne la même erreur:
g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -pthread -lgtest
EDIT: j'ai également essayé de spécifier -pthread
comme le dernier argument:
g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lgtest -pthread
même erreur
Ce que je fais mal?
source d'informationauteur user3165964
Vous devez vous connecter pour publier un commentaire.
L'option
-lgtest
est d'essayer de la relier à la dynamique de la bibliothèquelibgtest.so
. Voussouhaitez lier la bibliothèque statique
/home/user/gtest-1.7.0/lib/.libs/libgtest.a
.Au lieu de:
utilisation:
Noter que votre commande en ligne de fournitures pas de nom pour l'exécutable, qui sera par défaut
pour
a.out
. Si vous voulez que ça s'appelle, par exemple,mytest
, alors:Non, le problème est avec Gtest de construire.
Si vous construisez à l'aide de la norme configurer approche, ce n'est pas la fourniture de la
-lpthread
correctement pour créerlibgtest.so
. Par conséquent, lorsque vous essayez de construire une finale bibliothèque partagée qui utilise en fait le pthread capacité d'échec.Au lieu de cela, utilisez le Cmake approche:
Et installer manuellement en
/usr/lib/
Cette version correctement les liens dans libpthread en libgtest.
Vous devez spécifier
-pthread
après-lgtest
. L'éditeur de liens prend les bibliothèques dans l'ordre, et prend seulement autant qu'il a besoin pour résoudre les références qui ne sont pas définis à ce stade.Utilisation
-pthread
au lieu de-lpthread
(pour faire le lien avec pthread-bibliothèque), tout en vous à l'aide de gtest dans votre exécutable.OU
Déplacer le
-lpthread
aprèslibgtest.a
(séquence de questions).De réponse, nous avons probablement besoin de plus de information, vous êtes sur un ordinateur 64 bits et téléchargé une version 32 bits de la bibliothèque?