Compiler/erreur de lien à l'aide de pthread
J'essaie de faire un petit programme qui trie un tableau en utilisant des fils mais je n'arrive pas à compiler avec le support des threads.
Erreur:
sortieren.c:(.text+0xd7): undefined reference to `ptread_create'
J'ai utilisé un fichier pour faciliter la compilation mais aussi sur la ligne de commande je ne peux pas le faire fonctionner.
De base code:
#include <pthread.h>
int main(int argc, char **argv) {
pthread_t threads[2];
//code snipped
int ret = ptread_create(&threads[0], NULL, threadOne(), NULL);
printf("ret: %d\n", ret);
//code snipped
}
Faire fichier:
sortieren : sortieren.o
gcc sortieren.o
sortieren.o : sortieren.c
gcc -pthread -c sortieren.c
À l'aide de make sortieren
résultats de cette sortie
gcc -pthread -c sortieren.c
gcc sortieren.o
sortieren.o: In function `main':
sortieren.c:(.text+0xd7): undefined reference to `ptread_create'
collect2: ld returned 1 exit status
make: *** [sortieren] Fehler 1
Bien sûr, j'ai essayé de google, mais chaque "solution" que j'ai trouvé n'a pas fonctionné pour moi. J'ai essayé -pthread
ou -lpthread
partout dans mon fichier de créer. Pour être sûr que je n'ai pas fait quelque chose de mal dans mon code, j'ai aussi essayé un public de l'échantillon:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0;t<NUM_THREADS;t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
L'erreur est la même.
Système: Ubuntu 11.04 64 bits, GCC-Version 4.5.2
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.5.2-8ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-4.5/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.5 --enable-shared --enable-multiarch --with-multiarch-defaults=x86_64-linux-gnu --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib/x86_64-linux-gnu --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.5 --libdir=/usr/lib/x86_64-linux-gnu --enable-nls --with-sysroot=/--enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-gold --enable-ld=default --with-plugin-ld=ld.gold --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)
Mise à jour
À l'aide de ce @Banthar mentionné ne fonctionne pas, trop.
$ make sortieren
gcc -c sortieren.c
gcc -lpthread sortieren.o
sortieren.o: In function `main':
sortieren.c:(.text+0xd7): undefined reference to `ptread_create'
collect2: ld returned 1 exit status
make: *** [sortieren] Fehler 1
Double Possible de à l'Aide de pthread en c++
Quel désastre!! Ce qui aurait été non déclarées symbole d'erreur (en raison de la faute de frappe), devrait avoir soulevé par le compilateur lui-même, il passe par la phase de compilation.. et au lien-temps, l'éditeur de liens est de se plaindre!!! Sérieusement, c'est un comportement inacceptable de le compilateur!!
OriginalL'auteur WarrenFaith | 2011-06-13
Vous devez vous connecter pour publier un commentaire.
Devrait être:
gcc sortieren.o
après que les résultats dans la même erreur.J'ai édité ma réponse. Les bibliothèques, comme
-lpthread
, devraient être ajoutés au cours de ce lien. I. e. lorsque vous combinez votre.o
fichiers en exécutable.ne change rien...
Vous avez également une faute de frappe
ptread_create
au lieu depthread_create
.-lpthread
et d'autres-l
options doit être à la fin de la ligne de commande liens, pas au début.OriginalL'auteur Piotr Praszmo
Votre orthographe est mal ses
pthread_create()
et je pense que vous avez écritptread_create()
.Au moins le message d'erreur dit:
undefined reference to ptread_create
merci, Banthar déjà constaté que...
merci pour raconter je ne le savais pas
OriginalL'auteur Shweta