使用交叉编译进行静态链接

4

我的test.c程序使用printf函数。我想要静态链接所需的库。我使用arm-linux-gnueabi-gcc交叉编译器。

当我像这样编译我的代码

arm-linux-gnueabi-gcc test.c -o test

它通过了,但是通过查看test的反汇编,我认为它仍然使用动态链接。

那么,我应该添加哪个选项以便静态链接libc.a库呢?


传递-Wall以获取所有警告,并传递-static以请求静态链接到您的交叉编译器arm-linux-gnueabi-gcc - Basile Starynkevitch
此外,通过将“-v”传递给您的交叉编译器(除其他选项之外),以确保它按照您的意愿执行。 - Basile Starynkevitch
如果我使用arm-linux-gnueabi-gcc -Wall -static test.c -o test编译代码,然后尝试查看反汇编结果,则会出现异常情况。看起来它进入了某种无限循环。即使使用-v选项,反汇编结果也与没有使用这些选项相同。因此,我的假设可能是错误的,他并没有使用动态链接库...谢谢 :) - MarsaPalas
1个回答

4

尝试

arm-linux-gnueabi-gcc test.c -o test -Xlinker -static /path/to/libc.a

这对我很有帮助。同时,可能会提示您没有静态的libgcc_s库。那么请尝试以下操作:
arm-linux-gnueabi-gcc test.c -o test -Xlinker -static /path/to/libc.a -static-libgcc

希望这能帮到您!

谢谢,它构建得很好。但是在运行在qemu arm虚拟机中时,它会出现段错误。如果不是静态构建的话,它可以正常运行。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接