리눅스에서는 pthread와 main.c를 사용하는 공유 라이브러리가 있습니다.main.c가 pthread를 사용하지 않을 때 main.c 컴파일의 pthread에 명시 적으로 링크해야하는 이유는 무엇입니까?
libpthread.so가 내 공유 라이브러리의 ldd에 나타나는데 이것이 맞습니다. 내가 컴파일하지 내 공유 라이브러리의 pthreads를 사용하지 않는 내 main.c에 연결할 때
$ ldd libmapreduce.so.1.0
linux-gate.so.1 => (0x0067d000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0058c000)
[...]
는하지만, 내가 볼 :
$ icc -Wall -o main main.c -lmapreduce
/opt/intel/Compiler/11.1/046/lib/ia32/libiomp5.so: undefined reference to `pthread_atfork'
는, 즉, 내 컴파일 명령에
을 -lpthread 추가$ icc -Wall -o main main.c -lmapreduce -lpthread
은 정의되지 않은 참조를 해결합니다.
main.c가 libpthread를 사용하지 않고 공유 라이브러리에 이미 libpthread가 링크되어있는 경우 왜 libpthread에 명시 적으로 링크해야합니까?
감사합니다. 나는 전에 어떻게 든 이걸로 돌아갈 수 없었습니다 ... –
pthread를 필요로하는 공유 라이브러리가 올바르게 링크 되었다면, 메인 프로그램의 링크 커맨드 라인에서 그것을 필요로하지 않아야합니다. 하나 이상의 libs가 libpthread에 대한 참조가 아닌 주 프로그램에서 제공하는 정의되지 않은/처리 된 pthread 기호와 연결되어있는 것 같습니다. –
@R .. 감사합니다. 나는 당신이 어떻게 진술해야하는지에 대한 질문에 대답했습니다. 나는 파기를 계속할 것이다. –