2011-10-03 112 views
1

我想編譯一個共享庫,它將在Ubuntu 11.04上調用MATLAB函數。像命令:錯誤,同時在Matlab 11.11上編譯Matlab mex文件R2011a

mcc - B cpplib:libStepCluster StepCluster.m 

獲取以下錯誤。

/usr/lib/i38-linux-gnu/i686-linux-gnu/4.5.2/cc1plus: /usr/local/MATLAB/R2010a/sys/os/glnx86/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /usr/lib/libppl_c.so.2) 
/usr/lib/i38-linux-gnu/i686-linux-gnu/4.5.2/cc1plus: /usr/local/MATLAB/R2010a/sys/os/glnx86/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/libppl_c.so.2) 
/usr/lib/i38-linux-gnu/i686-linux-gnu/4.5.2/cc1plus: /usr/local/MATLAB/R2010a/sys/os/glnx86/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /usr/lib/libppl.so.7) 
/usr/lib/i38-linux-gnu/i686-linux-gnu/4.5.2/cc1plus: /usr/local/MATLAB/R2010a/sys/os/glnx86/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/libppl.so.7) 
/usr/lib/i38-linux-gnu/i686-linux-gnu/4.5.2/cc1plus: /usr/local/MATLAB/R2010a/sys/os/glnx86/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/libgmpxx.so.4) 

我知道代碼在Ubuntu 10.10中正常工作,並升級到Ubuntu 11.04。然後問題出來了。什麼是問題,以及如何解決它,而沒有太多的痛苦?

+0

請格式化你的答案,這將有助於回答 – Elpezmuerto

+0

@EricChu:看看這些討論,並讓我們知道是否有幫助(我沒有測試過任何解決方案):http:// forums。 opensuse.org/english/get-technical-help-here/applications/443229-after-11-3-upgrade-matlab-compiler-fails-because-gcc.html,https://bbs.archlinux.org/viewtopic。 php?id = 86809 – Amro

+0

欣賞格式化... –

回答

0

根是GLIBCXX_3.4.14' not found。找一個類似的SO問題:GLIBCXX versions和@ninjalj答案,看來你有連接問題:

使用readelf -aobjdump -x優先 檢查ELF文件strings。實際上,所有GLIBCXX_ *版本並不適用於整個 庫,而是適用於每個符號(符號版本,請參閱DSO-howto)。所以你 可以在同一個庫文件上有例如:std::char_traits<wchar_t>::[email protected]@GLIBCXX_3.4.5std::ios_base::Init::~Init()@@GLIBCXX_3.4

,你的程序需要GLIBCXX_3.4.9可能,這意味着它 已經對已引入/對GLIBCXX_3.4.9改變 語義符號鏈接。

+0

感謝您的回覆。我爲正確的gcc編譯器配置了matlab。問題沒有了。我沒有機會嘗試你的解決方案。還是謝謝。 –

1

MatLab R2011a編譯錯誤解決方案。

下載並安裝GCC-4.4

使用命令:mbuild -SETUP

選擇選項1,然後你會得到一個文件中/usr/local/MATLAB/R2011a/bin/mbuildopts.sh定位

搜索文件,並用gcc-4.4

更換所有的編譯器選項,然後編譯它,它應該罰款!

0

我試圖朱立倫的答案,但是這僅僅是爲我工作的事情:

sudo ln -s /usr/lib/libstdc++.so.6 {MATLABROOT}/sys/os/{architecture}/libstdc++.so.6 

您將要備份的文件第一次。