由于一些相当复杂的原因,我有一组文件,我想单独编译然后链接,但所以一个中的函数放在第二个内联。这是因为我希望它们在GCC中使用不同的标志进行编译。我知道我可以通过研究如何解决这个问题来解决问题,但我想知道这是否可行。
编辑1: 如果没有,是否可以将“外部”函数编译成我可以包含在另一个文件中的汇编形式。是疯了但也很酷......
快速浏览一下,这可能是一个选择。我想这是不可能自动编译的,所以有人可以给我一些关于汇编的信息吗?我只使用了基本的ARM组件。我在GCC中使用-S
标志编译为玩具函数。如何将寄存器与变量链接?他们总是在同一个顺序吗?该功能将得到高度优化。我什么时候应该开始和结束提取物?我应该在开始时加.cfi_startproc
,在结尾加.cfi_def_cfa 7, 8
吗?#
编辑2:
This post详细说明了gcc如何使用-flto
进行此类链接时优化。遗憾的是,这只适用于4.5版,我没有,也没有能力安装,因为我没有机器的root访问权限,我需要编译它。另一个可能的解决方案是解释如何在unix机器上的文件夹中安装不同版本的GCC。
答案 0 :(得分:1)
据我所知gcc不做linktime optimizations(特别是内联),至少使用标准的ld链接器(可能是新的gold链接器做了它,但我真的不这么认为)。 Clang原则上应该能够做到这一点,因为它取决于LLVM,which supports link time optimizations(似乎你的问题是gcc spacific)。
从您的问题来看,似乎您正在寻找一种在编译后合并目标文件的方法,而不一定是通过内联其包含的函数。这可以通过多种方式完成:
ar libfoo.a obj1.o obj2.o
。gcc -Wl,--relocatable -o obj3.o obj1.o obj2.o
gcc -shared -o libfoo.so obj1.o obj2.o
答案 1 :(得分:-1)
您可以使用-c选项进行编译以创建一组.o文件,甚至可以创建.so文件。然后在gcc的链接阶段使用你喜欢的序列。