2011-11-19 435 views
1

我目前正在嘗試編譯和鏈接Debian 64位上的32位應用程序,但它在鏈接時失敗。編譯和鏈接Debian 64位上的32位應用程序

我使用(在我的Makefile)編譯的命令是:

gcc -Os -m32 -Wall -g -c $< -o [email protected] 

這似乎是工作。

然後我用下面的命令鏈接:

gcc -m32 -lcurses $^ -o [email protected] 

這種失敗,並給出以下錯誤:

/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  

我到目前爲止已經試過(通常的解決方案,我發現其他地方的web)是:

  • 安裝gcc-multilib
  • 安裝lib32ncurses5lib32ncurses6dev
  • 添加選項-L/usr/lib32到鏈接命令

可悲的是,這些都不至今工作。 我正在用盡想法。我最後的手段是使用32位系統,但如果可能的話,我想避免這種情況。

回答

2

有兩個問題:

  1. 您的鏈接命令不正確:在鏈接行matters庫的順序。該命令應爲:gcc -m32 $^ -o [email protected] -lcurses
  2. 由於您要重新鏈接ncurses,請將最後一個參數-lncurses
+0

謝謝你的回答,它有效! 第一點並沒有改變我的情況,但感謝信息,我不知道這一點。 第二點解決了我的問題,非常驚人。你怎麼知道我想鏈接ncurses而不是詛咒?我自己並不知道...(我不確定兩者之間的區別,除非ncurses被認爲是更新的...?) – Ranzal

+0

「你是怎麼知道我想鏈接ncurses而不是詛咒的? 「你已經安裝了'lib32ncurses6dev'包;-) –

+0

的確,但主要是因爲它是唯一一個看起來接近我所需要的包。我有32位和64位的curses和ncurses,所以我真的不明白爲什麼它使用curses和ncurses的64位工作,但只有32位的ncurses。無論如何,它的工作原理是我需要的!謝謝 ;) – Ranzal

0

消息顯示gcc沒有找到ncurse庫的32位。

一個快速的解決辦法:找我的機器上(Ubuntu的11.10),我想應該是

gcc -m32 -lncurses $^ -o [email protected] -v 

凡庫實際上是在/lib32/libncurses.so.5.9。

通常,如果遇到問題,請嘗試。

gcc -m32 -lcurses $^ -o [email protected] -v 

它會打印出很多東西。

查找參數看起來像-L,並嘗試在目錄中查找庫文件(libfoo.so或libfoo.a)。

+0

但是'-lncurses'應該在'$ ^'後面 –

0

您可能需要lib32ncurses5-dev軟件包或類似軟件,爲ncurses提供32位變體開發包。

相關問題