BD *_*ill 17 gcc shared-libraries
我正在尝试构建一个共享对象库,该库将由程序使用dlopen()打开.该库将使用由静态的单独库提供的功能.
我在链接行中包含了相应的标志,以便在链接动态库时引入静态库(例如,我有-lfoo for libfoo.a),并且链接器不会抱怨.但是,当主程序在动态库上调用dlopen()时,调用将失败并引用静态库中的符号的"未定义符号"消息.
运行nm确实表明有问题的符号在动态库中未定义,并且主程序不包含它,那么如何强制链接器将此符号拉入?符号本身位于未初始化的数据部分(nm输出中的符号类型"B").
nos*_*nos 18
该--whole-archive链接器选项应该这样做.你可以用它作为例如
gcc -o libmyshared.so foo.o -lanothersharedlib -Wl,--whole-archive -lmystaticlib
Run Code Online (Sandbox Code Playgroud)
您所遇到的是,默认情况下,链接器将在您生成的二进制文件所需的静态存档中搜索符号,如果需要,则它将包含符号所在的整个.o.如果您的共享库不需要任何符号,它们不会包含在您的共享库中.
请记住,成为共享库的代码需要使用特殊选项进行编译,例如-fpic,当您在共享库中包含静态库时,需要使用相同的选项编译静态库.
小智 12
最近我正在寻找相同的解决方案.我找到了使用
--undefined=symbol
Run Code Online (Sandbox Code Playgroud)
要么
-u symbol
Run Code Online (Sandbox Code Playgroud)
解决了这个问题.
| 归档时间: |
|
| 查看次数: |
13129 次 |
| 最近记录: |