如何编译与32位库链接的64位文件

时间:2012-04-09 05:13:43

标签: linux 64-bit 32-bit

我的系统是Centos 5.8 64位,我想编译一个链接32位库的文件。我在编译时添加-m32,但结果显示“输入文件`gc_basic_call_model_voice_voice_video_3g_cnf_nbup.o'的i386:x86-64架构与i386输出不兼容”。 看来该文件无法在32位上编译。但是如果我不添加-m32,则无法编译库。如何成功编译文件,谢谢!

2 个答案:

答案 0 :(得分:7)

您不能在同一程序中混用32位和64位代码。编译器告诉您,您的一个.o文件被编译为64位对象,因此无法链接到32位可执行文件。您需要使用-m32从源代码重新编译该目标文件,也可能需要重新编译其他文件。

答案 1 :(得分:-1)

假设您以下列方式编译了32位版本的程序(让它称之为foo.c):

gcc -m32 -c foo.c -o foo.o

然后,您应该使用-melf_i386标志在其上调用链接器。

ld <whatever commands / flags you gave earlier> -melf_i386

示例:

ld -o foo.bin --oformat binary basic.o -melf_i386