【问题标题】:Compiling and linking a 32 bit application on Debian 64 bit在 Debian 64 位上编译和链接 32 位应用程序
【发布时间】:2012-01-02 02:44:15
【问题描述】:

我目前正在尝试在我的 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
  • 安装lib32ncurses5 和lib32ncurses6dev
  • 将选项-L/usr/lib32 添加到链接命令

遗憾的是,到目前为止,这些都没有奏效。 我的想法不多了。我最后的手段是使用 32 位系统,但如果可能的话,我想避免这种情况。

【问题讨论】:

    标签: linux gcc linker debian 32-bit


    【解决方案1】:

    有两个问题:

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

    【讨论】:

    • 感谢您的回答,它有效!就我而言,第一点并没有改变任何东西,但是感谢您提供的信息,我对此一无所知。第二点解决了我的问题,令人惊讶。你怎么知道我想链接 ncurses 而不是诅咒?我自己不知道......(我不太确定两者之间的区别,除了 ncurses 据说更新......?)
    • "你怎么知道我想链接 ncurses 而不是 curses?"你已经安装了lib32ncurses6dev 包;-)
    • 确实如此,但这主要是因为它是唯一一个似乎接近我所寻找的包。而且我有 32 位和 64 位的 curses 和 ncurses,所以我真的不明白为什么它可以在 64 位中使用 curses 和 ncurses,但只能使用 32 位的 ncurses。无论如何,它可以按我的需要工作!谢谢;)
    • 当您遇到此错误时,错误命名的库是链接顺序来得太早还是太晚?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

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

      它会打印出很多东西。

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

      【讨论】:

      • 但是-lncurses应该在$^之后
      猜你喜欢
      • 1970-01-01
      • 2016-05-17
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 2020-11-25
      • 2019-07-06
      相关资源
      最近更新 更多