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

6

在经过数小时的谷歌搜索后,我决定放弃并向专家们请教。我正在尝试在我的64位Ubuntu 11.10上构建一个32位应用程序(如果有人感兴趣,它是xgap)。我在makefile中添加了CFLAGS=-m32LDFLAGS=-L/usr/lib32。对象已经成功地构建为32位。最后一步是将所有X Windows的对象和库链接到这个可执行文件-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也不再在/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

有人知道这为什么会发生吗?我正在使用自动化工具进行配置和编译。我擅长修改这些脚本文件。


如何在64位Ubuntu上编译32位应用程序 - Ciro Santilli OurBigBook.com
2个回答

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

总的来说,我认为在使用-m32时,您应该能够省略-L/usr/lib32

当我按照您的建议操作时,gcc不再在/usr/lib32中搜索。它现在在/usr/lib/中搜索。错误信息如下:/usr/bin/ld: 在搜索-lXaw时跳过不兼容的/usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../libXaw.so /usr/bin/ld: 在搜索-lXaw时跳过不兼容的/usr/lib/libXaw.so /usr/bin/ld: 找不到-lXaw collect2: ld 返回 1 退出状态 - Rich
你有任何想法为什么会发生这种情况吗? - Rich
似乎Ubuntu的操作方式与我的预期不同。或者说,ia32-libs软件包并非如您所期望的那样。它并不能神奇地包含系统中所有64位库的32位对应版本,只有一些核心内容。您需要一个lib32-libXau或类似的软件包,不确定Debian/Ubuntu如何处理这个问题。 - rubenvb

1
我解决了这个问题。我认为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/中的那些文件有什么用?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接