为什么gcc在链接过程中更喜欢动态库到静态库?

时间:2017-05-11 08:25:05

标签: c gcc static-libraries dynamic-library

我编译并链接了一个简单的程序:

# 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选择动态的?顺便说一句,在编译程序时使用-lpthreadpthread作为链接选项有什么不同吗?

0 个答案:

没有答案