在linux上使用gcc进行增量连接.可能吗?

在linux上使用gcc进行增量连接.可能吗?,第1张

概述我们团队的项目开发方式,我们从我们所有的.o对象文件中为我们的应用程序生成一个共享对象库.我的任务(希望它足够具体,但一般足以让别人使用!)只链接自上次创建可执行文件以来发生更改的对象文件.例如,这里是我用来构建.so的命令行: g++34 -shared -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject2.o MyObject3.o 我们团队的项目开发方式,我们从我们所有的.o对象文件中为我们的应用程序生成一个共享对象库.我的任务(希望它足够具体,但一般足以让别人使用!)只链接自上次创建可执行文件以来发生更改的对象文件.例如,这里是我用来构建.so的命令行:
g++34 -shared -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject2.o MyObject3.o MyObject4.o   -o libmySharedlibrary.so

哪个按预期工作! :)我的目标是从现在开始仅链接更改的对象文件,加快并发链接过程.示例命令将是:

g++34 -shared -rdynamic -m64 -Wl,'$ORIGIN' MyObject1.o MyObject3.o   -o libmySharedlibrary.so

这将更新libmySharedlibrary.so与较新的对象文件,同时在libmySharedlibrary.so中保留较旧的对象文件.实际上,当我使用上述命令生成libmySharedlibrary.so时,文件大小比包含所有对象文件的文件大小小得多,所以我几乎可以确定上面的命令没有做我想要的.

通过我的研究,我发现链接器有一个-i选项,它与-r选项相同,它似乎只将所有对象文件合并成一个大对象文件.不幸的是,这不是我想要的.

简而言之,我想在初始链接之后仅链接更改的对象文件,从而为将来的链接更快地链接过程.有没有办法做到这一点?

编辑:我用-i / -r尝试过的一个例子:

示例命令:g 34 -Wl,-r -nostdlib -rdynamic -m64 -Wl,’$ORIGIN’MyObject1.o MyObject2.o MyObject3.o MyObject4.o -o AllMyObjects.o

我不得不添加-nostdlib标签来阻止它对我的吼叫需要它,并删除 – 共享,因为共享对象不允许与-r标签.

这个命令似乎是将我所有的.o文件放在一个大的.o文件中.所以如果我可以从这里更新那个.o文件,只有更改的.o文件,这将是伟大的.在最初创建AllMyObjects.o之后,我尝试了以下命令:g 34 -Wl,’$ORIGIN’MyObject1.o MyObject3.o -o AllMyObjects.o,但它也将创建一个更小的(文件大小)AllMyObjects.o,所以我假设它不可能拥有所有的对象文件.我觉得这是我可能犯了一个小错误的事情.任何人有任何建议?提前致谢.

解决方法 看起来你是正确的 – 共享,而不是一起工作.我对您的旧GCC版本持怀疑态度,但即使在Ubuntu 10.10上也可以看到相同的:
$ld -shared -r/usr/bin/ld.bfd.real: -r and -shared may not be used together

不幸的是,这意味着如果你绝对需要共享的对象,你已经达到了死胡同. binutils链接器根本不实现它.

如果静态库是您的选择,则它们只是可以使用ar实用程序轻松 *** 作的归档.

否则,您必须查看不同的链接器或编译器套件.我不能保证你会发现这个功能,但它似乎是异国情调.

总结

以上是内存溢出为你收集整理的在linux上使用gcc进行增量连接.可能吗?全部内容,希望文章能够帮你解决在linux上使用gcc进行增量连接.可能吗?所遇到的程序开发问题。

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

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

原文地址:https://www.54852.com/yw/1043710.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存