如何编译与32位库链接的64位文件
问题描述:
我的系统是Centos 5.8 64位,我想编译一个链接到32位库的文件。编译时加上-m32,但结果显示“输入文件”gc_basic_call_model_voice_video_3g_cnf_nbup.o“的i386:x86-64架构与i386输出不兼容”。 看来,该文件不能在32位编译。但是如果我不添加-m32,库不能被编译。如何成功编译文件,谢谢!如何编译与32位库链接的64位文件
答
您不能在同一个程序中混合使用32位和64位代码。编译器告诉你,你的.o
文件之一被编译为64位对象,所以它不能链接到32位可执行文件中。您需要重新编译该目标文件,也可能使用其他源代码,使用-m32
来处理所有内容。
答
假设你编译你的程序的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
哪台机器? Linux呢? – weima 2012-04-09 05:16:27
你使用过标志'-fPIC'和'-rdynamic' – weima 2012-04-09 05:19:41
我使用命令“gcc -m32 A.c B.c -Ldir -o output1.o output2.o”。但结果显示i386:输入文件“output1.o”的x86-64架构与i386输出不兼容。 dir中的文件是32位库。我不知道该怎么做:( – Jasoniem9246 2012-04-09 05:43:38