ThR*_*R37 3 g++ object shared-libraries archive
我有以下问题:
我想从所有目标文件创建一个共享库(.so).
问题:如果我使用:
g++ -shared libxxxx.a a1.o a2.o ... -o libnew.so
Run Code Online (Sandbox Code Playgroud)
g ++确实理解我想要链接静态库libxxxx.a并且不包括存档的所有符号.
一个简单的解决方法是首先使用ar -x然后创建lib 来扩展存档,但它并不是真正的"优雅".
必须有一个简单的命令强制g ++将整个存档包含在.so中,但我找不到它.
谢谢你的帮助.
来自man ld:
--whole-archive
对于--whole-archive选项后命令行中提到的每个归档,请在链接中包含归档中的每个目标文件,而不是在归档中搜索所需的目标文件.这通常用于将存档文件转换为共享库,从而强制将每个对象包含在生成的共享库中.此选项可能不止一次使用.从gcc使用此选项时的两个注意事项:首先,gcc不知道此选项,因此您必须使用-Wl,-whole-archive.其次,不要忘记在归档列表之后使用-Wl,-no-whole-archive,因为gcc会将自己的归档列表添加到您的链接中,您可能也不希望此标记也影响这些归档.
例:
g++ -shared -o yourlib a.o. b.o. c.o -Wl,-whole-archive libstatic.a -Wl,-no-whole-archive
Run Code Online (Sandbox Code Playgroud)
另请注意,在您的示例中,您首先放置静态库,然后是目标文件 - 在这种情况下,除非使用--whole-archive链接器选项,否则将找不到目标文件中使用的和静态库中定义的符号.如果要仅包含静态库中所需的符号,则需要将其after放在目标文件中.
g++ -o your_app a.o b.o c.o -lyour_static_lib
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2324 次 |
| 最近记录: |