小编gov*_*ind的帖子

什么是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
查看次数

将使用ICC构建的库与使用GCC构建的应用程序链接

我有一组静态库,例如lib1.alib2.alib3.a,它们是使用ICC(英特尔C / C ++编译器)编译的。我使用ICC和-ipo -c进行编译以创建.o文件,然后使用XIAR(Intel Archiver)来创建.a库。

我想将这三个库提供给没有ICC的客户端,因此将使用GCC来编译其应用程序并将其与这些库链接。请问速度增益(从跨文件优化预期,由于内置库-ipo选项)无法实现在所有的,如果她使用GCC链接这些库?

英特尔网站上“ GCC兼容性和互操作性 ”的本页指出:

提供了使用-ffat-lto-objects编译器选项的链接时优化,以实现gcc兼容性。这意味着ld和ar可用于链接和归档目标文件,但是这样做将丢失跨文件优化。

我在Ubuntu 12.04.2。上使用icc版本13.1.0(兼容gcc版本4.6.0)和gcc版本4.6.3。

任何帮助将不胜感激。

linker gcc icc

5
推荐指数
1
解决办法
1539
查看次数

标签 统计

linker ×2

c ×1

gcc ×1

icc ×1