可以静态链接共享对象库吗?

时间:2010-12-13 15:52:10

标签: shared-libraries dynamic-linking static-linking

我正在构建一个需要动态链接到我的项目的库。输出是.so文件,所以我认为我走在正确的轨道上。我担心它在编译时被链接的方式 - 通过指定其makefile的位置并依赖于一堆我以前从未遇到过的宏。

我可以假设,因为我正在构建一个.so库(而不是.a),我实际上是动态链接的吗?或者.so libs是否可以静态链接,在这种情况下我需要拆分make / config文件以更好地理解发生了什么?

谢谢,

安德鲁

1 个答案:

答案 0 :(得分:0)

我不熟悉可执行文件和共享对象的内部结构,所以我只能提供一些实用的提示。

假设您使用gcc,将目标文件链接到库时应该有-shared选项 - 这样ld(由gcc调用)会生成共享对象而不是可执行文件二进制的。

gcc -shared -o libabc.so *.o ...

当您将某个应用程序与此libabc.so链接时,它应该链接没有错误,然后使用ldd命令,您应该能够在其依赖项中看到libabc.so

$ ldd app
    ...
    libabc.so => ...............