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

Ric*_*ich 6 gcc ld 32bit-64bit

经过几个小时的谷歌搜索,我决定放弃并问你专家.我正试图在我的64 Ubuntu 11.10中构建一个32位应用程序(xgap,如果有兴趣的话).我在makefile中添加了CFLAGS = -m32LDFLAGS = -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
...
Run Code Online (Sandbox Code Playgroud)

我已经安装了ia32-libsmutilib支持.我想我只需要强制链接器生成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
Run Code Online (Sandbox Code Playgroud)

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

rub*_*nvb 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
Run Code Online (Sandbox Code Playgroud)

考虑到所有事情,我认为你应该能够-L/usr/lib32在使用时放弃-m32.