1

我目前正在尝试在我的 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 位系统,但如果可能的话,我想避免这种情况。

4

3 回答 3

2

有两个问题:

  1. 您的链接命令不正确:链接行上的库顺序很重要。命令应该是:gcc -m32 $^ -o $@ -lcurses
  2. 由于您想链接到ncurses,所以最后一个参数-lncurses
于 2011-11-19T22:28:13.023 回答
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)。

于 2011-11-19T22:00:24.693 回答
0

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

于 2011-11-20T05:54:16.110 回答