在64位Ubuntu中构建一个32位应用程序

时间:2011-12-07 19:15:43

标签: gcc 32bit-64bit ld

经过几个小时的谷歌搜索,我决定放弃并问你专家。我正试图在我的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 \ netlf32-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

任何人都知道为什么会这样?我正在使用自动工具进行配置和制作。我非常擅长修改这些脚本文件。

2 个答案:

答案 0 :(得分:6)

您还需要使用与-m32的链接。

gcc -m32 -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

考虑到所有事项,我认为您在使用-L/usr/lib32时应该可以放弃-m32

答案 1 :(得分:1)

我解决了这个问题。我认为 gcc 期待一个静态库存档。我使用http://ubuntuforums.org/showthread.php?t=474790中的 getlibs 脚本下载了链接所需的所有 .a 存档。然后 gcc 工作。我认为 gcc / usr / lib32 目录中搜索但未找到 .a 存档,因此继续搜索标准目录这是 / usr / lib ,它会找到不兼容的 *。so 文件。

但接下来的问题是: / usb / lib32 / 中的 *。所以文件包 ia32-libs 并不是真的有链接所需的库吗? / usr / lib32 / 中用于?

的文件是什么?