在Debian 64位上编译和链接32位应用程序

时间:2011-11-19 21:47:20

标签: linux gcc linker debian 32-bit

我目前正在尝试编译和链接我的Debian 64位上的32位应用程序,但它在链接时失败。

我正在使用(在我的Makefile中)编译的命令是:

gcc -Os -m32 -Wall -g -c $< -o $@

这似乎有效。

然后我用以下命令链接:

gcc -m32 -lcurses $^ -o $@

此操作失败并出现以下错误:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libcurses.so when searching for -lcurses
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libcurses.a when searching for -lcurses
/usr/bin/ld: skipping incompatible /usr/lib/libcurses.so when searching for -lcurses
/usr/bin/ld: skipping incompatible /usr/lib/libcurses.a when searching for -lcurses
/usr/bin/ld: cannot find -lcurses
collect2: ld returned 1 exit status    

到目前为止我尝试过的(我在网络上其他地方找到的常用解决方案)是:

  • 安装gcc-multilib
  • 安装lib32ncurses5lib32ncurses6dev
  • 将选项-L/usr/lib32添加到链接命令
可悲的是,到目前为止,这些都没有奏效。 我的想法已经不多了。我的最后一种方法是使用32位系统,但如果可能的话,我想避免使用它。

3 个答案:

答案 0 :(得分:2)

有两个问题:

  1. 您的链接命令不正确:链接行matters上的库顺序。该命令应为:gcc -m32 $^ -o $@ -lcurses
  2. 由于您要链接 ncurses ,请创建最后一个参数-lncurses

答案 1 :(得分:0)

该消息显示gcc没有找到32位的ncurse库。

快速解决方案:查看我的机器(ubuntu 11.10),我认为应该是

gcc -m32 -lncurses $^ -o $@ -v

库实际上位于/lib32/libncurses.so.5.9。

一般来说,如果遇到问题,请尝试。

gcc -m32 -lcurses $^ -o $@ -v

它会打印出很多东西。

查找看起来像-L的参数,并尝试在目录中找到库文件(libfoo.so或libfoo.a)。

答案 2 :(得分:0)

您可能需要lib32ncurses5-dev包或类似的东西,为ncurses提供32位变体开发包。