The*_*ppo 3 c++ linux linker gcc
我正在讨论一些关于我正在进行的项目的链接的选项:
我正在尝试创建一个与其他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
Run Code Online (Sandbox Code Playgroud)
我的辩护:我不是ac/c ++专家,很抱歉,如果这个问题似乎很愚蠢.
jsc*_*ier 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
Run Code Online (Sandbox Code Playgroud)