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

Gcc 在64位Ubuntu中构建32位应用程序,gcc,32bit-64bit,ld,Gcc,32bit 64bit,Ld,经过几个小时的谷歌搜索,我决定放弃,向各位专家请教。我正试图在我的64 Ubuntu 11.10中构建一个32位应用程序(如果有人感兴趣的话,可以使用xgap)。我在makefile中添加了CFLAGS=-m32和LDFLAGS=-L/usr/lib32。这些对象被内置到32位fine中。最后一步是将X窗口的所有对象和库链接到这个可执行文件xgap中。不知怎的,它总是给我这个错误: gcc -o xgap xcmds.o utils.o gapgraph.o gaptext.o pty.o po

经过几个小时的谷歌搜索,我决定放弃,向各位专家请教。我正试图在我的64 Ubuntu 11.10中构建一个32位应用程序(如果有人感兴趣的话,可以使用xgap)。我在makefile中添加了CFLAGS=-m32LDFLAGS=-L/usr/lib32。这些对象被内置到32位fine中。最后一步是将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多lib支持。我想我只需要强制链接器生成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

有人知道为什么会这样吗?我正在使用自动工具进行配置和制作。我真的很擅长修改那些脚本文件。

您还需要使用链接
-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希望有一个静态库归档。我使用中的getlibs脚本下载链接所需的所有.a存档。然后,gcc起作用。我认为,gcc确实在/usr/lib32目录中搜索了,但没有找到。a存档文件继续在标准目录中搜索,即/usr/lib,在那里它找到了不兼容的*。so文件


但是问题是:包ia32 libs/usr/lib32/中的*.so文件实际上没有链接所需的库?/usr/lib32/中的那些文件是用来做什么的?

我听你的建议时,gcc不再在/usr/lib32中搜索了。它在/usr/lib/中搜索。错误消息如下:/usr/bin/ld:skipping compatible/usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../../libXaw.so在搜索-lXaw/usr/bin/ld时:skipping compatible/usr/libXaw.so在搜索-lXaw/usr/bin/ld时:找不到-lXaw collect2:ld返回1退出状态您知道为什么会发生这种情况吗?看起来Ubuntu是做一些不同于我期望的事情。或者,
ia32 libs
包不是您所期望的。它并没有神奇地包含系统上所有64位库的所有32位对应项,只有一些核心内容。你需要一个
lib32libxau
或者别的什么东西,不知道Debian/Ubuntu是如何处理的