在 64 位 Ubuntu 中构建 32 位应用程序 [英] Building a 32-bit app in 64-bit Ubuntu
问题描述
经过数小时的谷歌搜索,我决定放弃并请教各位专家.我正在尝试在我的 64 位 Ubuntu 11.10 中构建一个 32 位应用程序(如果有人感兴趣,则为 xgap).我在 makefile 中添加了 CFLAGS=-m32 和 LDFLAGS=-L/usr/lib32.这些对象被内置到 32 位精细中.最后一步是将 X 窗口的所有对象和库链接到这个可执行文件——xgap.不知何故,它不断给我这个错误:
After hours of googling, I decide to give up and ask you experts. I am trying to build a 32-bit application (xgap if anyone interested) in my 64 Ubuntu 11.10. I added the CFLAGS=-m32 and the LDFLAGS=-L/usr/lib32 in the makefile. The objects are built into 32 bit fine. The last step is to link all the objects and libraries for X windows into this executable---xgap. Somehow it keeps giving me this error:
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 位库.我想知道是否需要按固定顺序放置这些标志?
I have installed ia32-libs and mutilib support. I think I just need to force the linker to generate a i386 output. I tried to put two ld flags in my gcc command as shown above: -melf_i386 and -oformat elf32-i386. But what happens is that gcc doesn't search for the 32 bit library in /usr/lib32 anymore. I wonder if I need to put those flags in some fixed order?
感谢您的任何想法和帮助!
Thanks for any idea and help!
编辑:当我在上一个 gcc 命令(我相信是链接阶段)中添加 -m32 标志时,即使我有 -L/usr/lib32 标志,gcc 也不会不再在/usr/lib32 中搜索(真的很奇怪...)并生成以下错误:
EDIT: when I add the -m32 flag in my last gcc command (the linking stage I believe), even if I have the -L/usr/lib32 flag in place, gcc doesn't search in /usr/lib32 anymore ( really weird...) and generates the following error:
/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
有人知道为什么会这样吗?我正在使用自动工具进行配置和制作.我真的很擅长修改那些脚本文件.
Any one has any idea why this happens? I am using the auto tool to configure and make. I am really good at modifying those script files.
推荐答案
您还需要使用带有 -m32
的链接.
You need to use link with -m32
as well.
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
考虑到所有因素,我认为您在使用 -m32
时应该能够删除 -L/usr/lib32
.
All things considered, I think you should be able to drop the -L/usr/lib32
when using -m32
.
这篇关于在 64 位 Ubuntu 中构建 32 位应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!