小编Rap*_*ven的帖子

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

我的团队项目的开发方式,我们从我们所有的.o目标文件为我们的应用程序生成一个共享对象库.我的任务(希望它足够具体,但也足够通用以供其他人使用!)是仅链接自上次创建可执行文件以来已更改的目标文件.例如,这是我用来构建.so的命令行:

g++34 -shared -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject2.o MyObject3.o MyObject4.o   -o libMySharedLibrary.so
Run Code Online (Sandbox Code Playgroud)

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

g++34 -shared -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject3.o   -o libMySharedLibrary.so
Run Code Online (Sandbox Code Playgroud)

哪个会libMySharedLibrary.so使用较新的目标文件进行更新,同时libMySharedLibrary.so还要保留较旧的目标文件.实际上,当我libMySharedLibrary.so使用上面的命令生成时,文件大小比包含所有目标文件的文件大小小得多,所以我几乎可以确定上面的命令没有按照我的意愿行事.

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

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

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

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

我不得不添加-nostdlib标签以阻止它向我大吼大叫需要它,并删除-shared因为-r标签不允许共享对象.

这个命令似乎将我的所有.o文件都压缩成一个大的.o文件.所以,如果我只能从改变的.o文件那里更新那个.o文件,那就太好了.在最初创建AllMyObjects.o之后,我尝试了这个命令:g++34 -Wl,-r -nostdlib -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject3.o -o AllMyObjects.o,但它也会创建一个更小的(文件大小)AllMyObjects.o,所以我假设它不可能拥有所有的目标文件.我觉得这是我可能犯了一个小错误的东西.有人有什么建议吗?提前致谢.

linux gcc ld incremental-linking object-files

17
推荐指数
2
解决办法
5830
查看次数

标签 统计

gcc ×1

incremental-linking ×1

ld ×1

linux ×1

object-files ×1