经过数小时的搜寻后,我决定放弃并请教专家。我试图在我的64 Ubuntu 11.10中构建一个32位应用程序(如果有兴趣,请使用xgap)。我在生成文件中添加了CFLAGS = -m32和LDFLAGS = -L / usr / lib32。对象内置为32位精度。最后一步是将X窗口的所有对象和库链接到此可执行文件-xgap中。不知何故,它一直给我这个错误:
gcc -o xgap xcmds.o utils.o gapgraph.o gaptext.o pty.o popdial.o xgap.o selfile.o -L/usr/lib32 -lXaw -lXmu -lXt -lXext -lX11 -lSM -lICE
/usr/bin/ld: skipping incompatible /usr/lib32/libXmu.so when searching for -lXmu
...
/usr/bin/ld: i386 architecture of input file `xcmds.o' is incompatible with i386:x86-64 output
...
我已经安装了ia32-libs和mutilib support。我想我只需要强制链接器生成i386输出即可。我试图在我的gcc命令中放置两个ld标志,如上所示:-melf_i386和-oformat elf32-i386。但是发生的是,gcc不再在/ usr / lib32中搜索32位库。我想知道是否需要按固定顺序放置这些标志?
感谢您的任何想法和帮助!
编辑:当我在最后一个gcc命令中添加-m32标志(我相信链接阶段)时,即使我具有-L / usr / lib32标志,gcc也不再在/ usr / lib32中搜索(真的奇怪...),并产生以下错误:
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../libXaw.so when searching for -lXaw
/usr/bin/ld: skipping incompatible /usr/lib/libXaw.so when searching for -lXaw
/usr/bin/ld: cannot find -lXaw
collect2: ld returned 1 exit status
有人知道为什么会这样吗?我正在使用自动工具进行配置和制作。我真的很擅长修改那些脚本文件。
EIDT:我解决了这个问题。我认为gcc期望使用静态库存档。我使用http://ubuntuforums.org/showthread.php?t=474790中的getlibs脚本下载了链接所需的所有.a档案。然后gcc工作了。我认为gcc确实在/ usr / lib32目录中进行了搜索,但是没有找到 .a档案,因此继续在标准目录/ usr / lib中进行搜索,在该目录中找到了不兼容的* .so文件。
但是,问题是:ia32-libs包中的/ usr / lib32 /中的* .so文件实际上没有链接所需的库吗?/ usr / lib32 /中的那些文件有什么用?