相关疑难解决方法(0)

将静态库链接到其他静态库

我有一小段代码依赖于许多静态库(a_1-a_n).我想将该代码打包到静态库中,并将其提供给其他人.

我的静态库,让我们称之为X,编译好.

我创建了一个使用X函数的简单示例程序,但是当我尝试将它链接到X时,我从库a_1 - a_n中得到许多关于丢失符号的错误.

有没有办法可以创建一个新的静态库,Y包含X和X所需的所有功能(a_1 - a_n中的选定位),这样我就可以为人们分配Y来链接他们的程序了吗?


更新:

我已经看过只是使用ar转储所有内容并制作一个mega-lib,然而,最终包含了许多不需要的符号(所有.o文件大约为700 MB,但是,静态链接的可执行文件是7 MB).有没有一种很好的方法只包括实际需要的东西?


这看起来与如何将多个C/C++库合并为一个密切相关.

c++ linker unix-ar .a

125
推荐指数
6
解决办法
10万
查看次数

什么是GNU链接器中的部分链接?

我能找到的最佳解释来自官方文件:

-r --relocateable生成可重定位输出 - 即生成一个输出文件,该输出文件又可以作为ld的输入.这通常称为部分链接.作为副作用,在支持标准Unix幻数的环境中,此选项还将输出文件的幻数设置为OMAGIC.如果未指定此选项,则会生成绝对文件.链接C++程序时,此选项不会解析对构造函数的引用; 要做到这一点,请使用-Ur.此选项与`-i'的作用相同.

我特别想知道链接器输入中出现的符号会发生什么.当我有一个包含单个目标文件component.o的静态库libstatic.a时,请考虑具体情况.现在,我想创建另一个静态库libfinal.a,它将作为libstatic.a的接口.我用这个命令来创建它:

ld -r -o libfinal.a wrapper.o -L. -lstatic

其中wrapper.o提供了独有的API来调用libstatic.a中定义的函数

请问libfinal.a将只具有合并的归档文件wrapper.ocomponent.o或可待解决的所有引用wrapper.ocomponent.o来解决(连接),然后放入libfinal.a

Edit_1:根据所取得的进展更新问题:组件库()的objdump分别显示每个函数的部分(如预期的那样).在组合库中,由部分链接(flag)创建的只有一个部分.我想这意味着内部链接已经发生,而且不仅仅是创建一个普通的存档.libstatic.aobjdump -D libstatic.a.textlibfinal.a-r.text

c linker

13
推荐指数
2
解决办法
4763
查看次数

标签 统计

linker ×2

.a ×1

c ×1

c++ ×1

unix-ar ×1