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