我正在讨论一些关于我正在进行的项目的链接的选项:
我正在尝试创建一个与其他2个库链接的共享库。 (让我们称他们为libfoo.so
和libbar.so
)
我的输出库必须是一个共享库,我想将静态链接libfoo.so
添加到生成的库中,但libbar.so
应该作为动态库链接。 (libbar.so
应该在libfoo.so
不可用的每台计算机上都可用,我不希望用户将其安装/发送给我的二进制文件。)
我如何存档?
我当前的构建说明如下所示:
c++ -Wall -shared -c -o src/lib.o src/lib.cpp
c++ -Wall -shared -o lib.ndll src/lib.o -lfoo -lbar
我的辩护:我不是c / c ++专家,如果这个问题看起来很愚蠢,那就很抱歉。
答案 0 :(得分:10)
有两种Linux C / C ++库类型。
静态库(*.a
)是目标代码的归档,它们与应用程序链接并成为其中的一部分。使用ar(1)
命令创建它们并进行操作(即ar -t libfoo.a
将列出库/存档中的文件)。
动态链接的共享对象库(*.so
)可以通过两种方式使用。
为了将libfoo.so
静态链接到二进制文件中,您需要一个通常称为libfoo.a
的相应静态库。在创建程序可执行文件时,可以通过在编译和链接过程中调用静态库来使用静态库。
结果是将构建命令更改为以下内容:
g++ -Wall -fPIC -c -o src/lib.o src/lib.cpp
g++ -shared -Wl,-soname,mylib.so.1 -o mylib.so.1 src/lib.o -L/path/to/library-directory -lbar libfoo.a