2012-03-26 82 views
3

我編譯程序通過鐺+ LLVM(3.1版),並試圖也有同樣的鐺+ LLVM版本的計算機上運行它在編譯的程序。我在Ubuntu 10上編譯,但是我試圖運行的其他計算機上有CentOS 5.在CentOS中,我也遇到了通過LLVM編譯的問題(編譯器通道在LLVM中實現)。這就是爲什麼我想在Ubuntu上進行編譯,從那裏取出exe,然後在CentOS機器上運行它。從運行鐺+ LLVM另一臺機器

但是,當我嘗試這樣做時,出現以下錯誤。

./main: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./main) 
./main: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./main) 

我該如何解決這個問題。請注意,我沒有在該機器上進行root訪問。

回答

3

一個解決辦法是從您的工作Ubuntu機庫複製到你的CentOS機器。放入你的Home/Workdir/whereever(TM)並將LD_PRELOAD變量設置爲該庫。但是這可能非常乏味,因爲這可能不是唯一缺失的庫(也許庫依賴於其他庫,您還需要...)。

如果兩臺機器都具有相同的體系結構(例如,如果您的Ubuntu機器是32位和CentOS 64,則它不工作)。

+0

LD_PRELOAD已經做到了。真棒! – pythonic 2012-03-26 14:14:15

+0

我想到的另一個選擇是編譯靜態程序(即包含所有必需的庫函數)。 – flolo 2012-03-27 05:46:04

1

交叉編譯總是一個難題。在你的情況下,你在這兩臺機器上有不同的C++庫版本。如果您不需要經常這樣做,我建議您嘗試解決CentOS上的編譯問題。這可能是更簡單的方法。

+0

是的。 GCC是一個編譯器套件,因此它帶有一個C++和一個c編譯器。由於您的C++庫不匹配,您的c庫也不會。 – Azrael3000 2012-03-26 12:41:58

2

Centos 5使用比Ubuntu 11.04或11.10更舊版本的libstdC++,因此無法使用二進制文件。

無論是在CentOS 5編譯,或者發現不工作舊的編譯環境。如果您使用的是gcc,您也可以調查LSB編譯器環境。

相關問題