同时包含.a和.so的库 - 如何强制使用.a?

时间:2013-07-12 21:20:35

标签: static linker .a

我在Linux上使用Qt Creator编写程序。它使用一个库,我在.so目录中有.a/usr/lib等价物,例如:

/usr/lib/libuseme.a

/usr/lib/libuseme.so

根据我的理解,如果我链接到.so,它会动态关联,但如果我链接到.a,则会静态链接。

在这种情况下,我想静态链接,让我有更好的机会以自包含的方式分发我的程序。

但是链接器的-l选项只允许指定库名,不包括lib或扩展名 - 例如

-luseme

那么如何表明我希望它(静态地)链接到.a,而不是动态链接到.so

2 个答案:

答案 0 :(得分:1)

  

那么我如何表明我希望它(静态地)链接到.a,而不是动态地链接到.so?

两种方式:

  • 使用完整的库路径/usr/lib/libuseme.a而不是-luseme
  • 进行链接
  • 告诉链接器您想要归档副本:-Wl,-Bstatic -luseme -Wl,-Bdynamic

答案 1 :(得分:0)

您可以使用-static强制静态链接。

但是,如果您不想静态链接每个库,则可以将库的.a文件的路径添加到该命令与其余文件的静态链接。