gcc
を使用する場合、-l
オプションの配置に問題があります。ここで問題を再現するために、削除されたバージョンがあります。gccの `-l 'オプションの配置
t.c:
#include <pthread.h>
int main() {
pthread_create(0, 0, 0, 0);
}
と端末で
:$ gcc -lpthread t.c
/tmp/ccmkwV7B.o: In function `main':
t.c:(.text+0x29): undefined reference to `pthread_create'
collect2: ld returned 1 exit status
$ gcc t.c -lpthread
$ (compiles ok)
なぜ私はそれを動作させるために、最後に-lpthread
を入れなければならないのですか?そして、この問題は32bit Linuxでのみ発生するようです。
私の環境情報は以下に添付されています:
gcc -lpthread t.c
このマシンでは失敗します。
$ gcc --version
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
$ uname -rm
3.0.0-12-generic i686
gcc -lpthread t.c
がこのマシンで動作します。
$ uname -rm
2.6.18-274.3.1.el5 x86_64
$ gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-51)
私はgccのマニュアルを見上げ、それが
が "-lの位置は重要である" と述べています。それはどういう意味ですか?
manualから
これはリンカのほとんどに依存します。両方のシステムで 'ld --version'を実行できれば、もっと啓発されるかもしれません。 –