我编译并链接了一个简单的程序:
# gcc a.c -pthread
# ldd a.out
linux-vdso.so.1 (0x00007ffc4ddf2000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fbb75e12000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007fbb75a6e000)
/lib64/ld-linux-x86-64.so.2 (0x00007fbb76030000)
该程序链接共享库。但是从gcc manual:
-llibrary
-l library......
链接器搜索库的标准目录列表, 这实际上是一个名为liblibrary.a的文件。然后链接器使用它 文件,就好像它是由名称精确指定的一样 ......
程序似乎应该链接静态库。我发现有静态和动态库:
# ls -alt /usr/lib/libpthread*
-rw-r--r-- 1 root root 392576 Mar 6 22:06 /usr/lib/libpthread.a
lrwxrwxrwx 1 root root 18 Mar 6 22:06 /usr/lib/libpthread.so.0 -> libpthread-2.25.so
-rw-r--r-- 1 root root 1748 Mar 6 22:06 /usr/lib/libpthread_nonshared.a
-rwxr-xr-x 1 root root 146824 Mar 6 22:06 /usr/lib/libpthread-2.25.so
-rw-r--r-- 1 root root 222 Mar 6 22:06 /usr/lib/libpthread.so
为什么gcc
选择动态的?顺便说一句,在编译程序时使用-lpthread
和pthread
作为链接选项有什么不同吗?