在动态库中包含静态库
我有以下问题:
- 几个目标文件a1.o,a2.o,a3.o,...
- 一个存档libxxxx.a。 存档 libxxxx.a 仅包含目标文件:b1.o、b2.o 等...
我想从所有目标文件创建一个共享库(.so)。
问题:如果我使用:
g++ -shared libxxxx.a a1.o a2.o ... -o libnew.so
g++ 确实理解我想要链接到静态库 libxxxx.a 并且不包含存档的所有符号。
一个简单的解决方法是首先使用 ar -x 扩展存档,然后创建库,但这并不是真正的“优雅”。
必须有一个简单的命令来强制 g++ 将整个存档包含在 .so 中,但我找不到它。
感谢您的帮助。
I have the following problem :
- several object files a1.o, a2.o, a3.o, ...
- an archive libxxxx.a.
The archive libxxxx.a only contains object files : b1.o, b2.o etc...
I would like to create a shared library (.so) from all the object files.
Problem : If I use :
g++ -shared libxxxx.a a1.o a2.o ... -o libnew.so
g++ does understand that I want to link with the static library libxxxx.a and does not include all the symbols of the archive.
A simple workaround is to first expand the archive using ar -x
and then create the lib but it's not really "elegant".
There must be a simple command to force g++ to include the whole archive in the .so but I can't find it.
Thanks for your help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
来自
man ld
:示例:
另请注意,在您的示例中,您首先放置静态库,然后放置目标文件 - 在这种情况下,除非您使用
--whole-archive<,否则将找不到目标文件中使用的符号和静态库中定义的符号/code> 链接器选项。如果您只想包含静态库中所需的符号,则需要将其放在目标文件
之后
。From
man ld
:Example:
Note also that in your example you first put static library, then the object files - in this case the symbols used in the object files and defined in static library will not be found unless you use
--whole-archive
linker option. If you want to include just the needed symbols from the static library, you need to put itafter
the object files.