我有一个c程序依赖于第二个库,我可以控制它的编译。我希望能够将我的程序编译成共享对象库,而无需链接到第二个库。换句话说,我想在最后一个单一的共享对象库。我怎么能这样做?
如果我将第二个库单独编译成.so并在编译我的程序时将其作为依赖项包含,我可以看到当我在二进制文件上运行ldd时我需要该文件。
答案 0 :(得分:3)
您需要将第二个库编译为.a(静态库)并将其静态链接到您的c程序中。
静态链接是指在编译时链接目标文件并且是最终二进制文件的一部分,生成的可执行文件可以在没有依赖项的情况下执行。
共享库(.so)在运行时链接,并且在您执行链接它们的二进制文件时必须可用。
静态链接的gcc标志是:-static
这将自动搜索.a文件。
答案 1 :(得分:0)