在 Linux 中,我制作了一个使用 pthread 的共享库和一个不使用 pthread 的 main.c。
libpthread.so 显示在我的共享库的 ldd 中,这是正确的。
$ ldd libmapreduce.so.1.0
linux-gate.so.1 => (0x0067d000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0058c000)
[...]
但是,当我编译并链接不使用 pthread 的 main.c 到使用 pthread 的共享库时,我看到:
$ 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?
为了创建可执行文件或 DLL,您需要链接程序中所有依赖项的传递闭包。因为 main.c 链接在共享库中,所以您还必须链接共享库的所有依赖项,其中包括 pthreads。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)