如何将共享对象中的所有对象归档?

如何将共享对象中的所有对象归档?,第1张

概述如何将共享对象中的所有对象归档

在编译我们的项目时,我们创build了几个档案(静态库),比如liby.a和libz.a ,每个档案都包含一个定义函数y_function()和z_function()的对象文件。 然后,这些档案被join一个共享对象,比如libyz.so ,这是我们主要的可分配目标之一。

g++ -fPIC -c -o yo y.cpp ar cr liby.a yo g++ -fPIC -c -o zo z.cpp ar cr libz.a zo g++ -shared -L. -ly -lz -o libyz.so

在示例程序中使用此共享对象时,如xc ,由于未定义的函数y_function()和z_function()引用,链接将失败。

g++ xo -L. -lyz -o xyz

但是,当我将最终的可执行文件直接链接到存档(静态库)时,它可以正常工作。

g++ xo -L. -ly -lz -o xyz

我的猜测是,包含在档案中的目标文件没有链接到共享库,因为它们没有被使用。 如何强制包容?

Tar归档:追加可靠性如何?

如何在windows XP上使用Perl存档.log文件?

linux解压缩带有掩码的列表无法提取所有匹配的文件

列出多个.tar存档文件的内容

让IExpress安装将文件复制到正确的位置

编辑:

包含可以使用–whole-archive ld选项强制。 但是,如果编译错误的结果:

g++ -shared '-Wl,--whole-archive' -L. -ly -lz -o libyz.so /usr/lib/libc_nonshared.a(elf-init.oS): In function `__libc_csu_init': (.text+0x1d): undefined reference to `__init_array_end' /usr/bin/ld: /usr/lib/libc_nonshared.a(elf-init.oS): relocation R_X86_64_PC32 against undefined hIDden symbol `__init_array_end' can not be used when making a shared object /usr/bin/ld: final link Failed: Bad value

任何想法,这是从哪里来的?

我怎样才能打包到tar文件只有path上的最后一个目录?

在windows上解压缩多部分tarball

从c中的资源解压缩多个文件

从python编辑.RAR文件注释

Unix使用的随机存取档案

你可以试试(ld(2)):

--whole-archive For each archive mentioned on the command line after the --whole-archive option,include every object file in the archive in the link,rather than searching the archive for the required object files. This is normally used to turn an archive file into a shared library,forcing every object to be included in the resulting shared library. This option may be used more than once.

(gcc -Wl, – 整个档案)

另外,您应该在库列表的末尾放置-Wl,--no-whole-archive 。 (正如德米特里·尤达科夫在下面的评论中所说的那样)

总结

以上是内存溢出为你收集整理的如何将共享对象中的所有对象归档?全部内容,希望文章能够帮你解决如何将共享对象中的所有对象归档?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1275514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存