【发布时间】:2012-01-15 07:21:09
【问题描述】:
经过几个小时的谷歌搜索,我决定放弃并请教各位专家。我正在尝试在我的 64 位 Ubuntu 11.10 中构建一个 32 位应用程序(如果有人感兴趣,则为 xgap)。我在 makefile 中添加了 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 支持。我想我只需要强制链接器生成 i386 输出。如上所示,我尝试在我的 gcc 命令中放置两个 ld 标志:-melf_i386 和 -oformat elf32-i386。但发生的情况是 gcc 不再在 /usr/lib32 中搜索 32 位库。我想知道是否需要将这些标志按固定顺序排列?
感谢您的任何想法和帮助!
编辑:当我在最后一个 gcc 命令(我相信的链接阶段)中添加 -m32 标志时,即使我有 -L/usr/lib32 标志,gcc 也不会t 在 /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
有人知道为什么会这样吗?我正在使用自动工具进行配置和制作。我真的很擅长修改那些脚本文件。
【问题讨论】:
标签: gcc 32bit-64bit ld