2013-02-19 175 views
3

我試圖使用64位的32位2012A Matlab來MEX C代碼的Ubuntu 12.10符號鏈接編譯使用32位庫的代碼在64位的Ubuntu 12.10

我已經下載了所有可能的庫(GCC 4.7,建立必要的,庫-32等),但是我收到以下錯誤

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.so when searching for -lstdc++ 
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.a when searching for -lstdc++ 
/usr/bin/ld: cannot find -lstdc++ 
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libgomp.so when searching for -lgomp 
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libgomp.a when searching for -lgomp 
/usr/bin/ld: cannot find -lgomp 
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libgcc_s.so when searching for -lgcc_s 
/usr/bin/ld: cannot find -lgcc_s 
collect2: error: ld returned 1 exit status 

我發現,這個問題可以通過從64位庫設置符號鏈接到32要解決位的。我試圖創建不同的鏈接,但無法完成編譯。

預先感謝您。

更新1

的gcc-multilib的失蹤了,所以以後

sudo apt-get install gcc-multilib 

我收到以下錯誤

Warning: You are using gcc version "4.7.2-2ubuntu1)". The version 
    currently supported with MEX is "4.4.6". 
    For a list of currently supported compilers see: 
    http://www.mathworks.com/support/compilers/current_release/ 

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.so when searching for -lstdc++ 
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.a when searching for -lstdc++ 
/usr/bin/ld: cannot find -lstdc++ 
collect2: error: ld returned 1 exit status 

我mexopts.sh看起來像

CC='gcc' 
CFLAGS='-ansi -D_GNU_SOURCE' 
CFLAGS="$CFLAGS -fPIC -pthread -m32" 
CFLAGS="$CFLAGS -fexceptions" 
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64" 
CLIBS="$RPATH $MLIBS -lm" 
COPTIMFLAGS='-O -DNDEBUG' 
CDEBUGFLAGS='-g' 
CLIBS="$CLIBS -lstdc++" 

-m32在那裏,但我不確定它是否應該以這種方式寫入。 有人可以詳細說明如何編輯mexopts.sh使matlab看看32位庫嗎?看着Linking using g++ fails searching for -lstdc++

更新2

我試圖安裝的g ++ - multilib的

sudo apt-get install g++-multilib 

現在,錯誤的格式如下:

/usr/bin/ld: i386:x86-64 architecture of input file `bin/fv_cache.o' is incompatible with i386 output 
/usr/bin/ld: i386:x86-64 architecture of input file `bin/obj_func.o' is incompatible with i386 output 
... 
+0

您可以通過在命令行上執行gcc(使用-m32選項?)和一些虛擬.c代碼來構建32位可執行文件嗎? – durasm 2013-02-19 21:40:43

+0

我剛剛嘗試過 - 因爲缺少gcc 4.7-multilib,所以無法啓動。感謝您指出了這一點! – Gnattuha 2013-02-20 14:16:53

回答

0
  • 首先確保你可以建立通過執行海灣合作委員會(更多資訊:32bit application on 64 bit Linux)從命令提示符32位可執行
  • 在MATLAB命令提示符下執行mex -setup並選擇gcc作爲編譯器。最後你會得到一個關於'mexopts.sh'位置的信息(通常是〜/ .matlab // mexopts.sh)
  • 嘗試「mex」。
  • 如果不成功打開mexopts.sh並檢查選項-m32是否在CFLAGS。如果沒有,請添加它。