2012-10-18 57 views
10

TLDR:無法編譯在Ubuntu Debian中的Centos Redhat中工作的C++程序。有什麼我應該知道這兩個之間會使一個C++程序編譯使用相同的編譯器不起作用?我無法在Debian(Ubuntu)中運行Redhat(Centos)中的C++程序

你好,我試圖編譯和運行Germline(http://www1.cs.columbia.edu/~gusev/germline/)。它在RedHat Centos中可以正常工作,但是因爲對於我轉換的大多數東西,Centos不像Ubuntu那樣受到支持。現在這個程序不起作用。它完全有可能使用某種RedHat唯一的功能,但我使用相同的編譯器(g ++)在兩種環境中進行編譯。

我一直在努力讓這個東西在Ubuntu上工作,因爲它是更好的工作,但截至目前,當我「在Ubuntu」項目「全部」,它將編譯和測試旋轉(永遠不要完成)永遠。無論使用哪種二進制文件(在Centos中編譯並複製,我剛纔提到的失敗的測試二進制文件等),該程序都會一直凍結。

有點長,對不起。我的主要問題是:是否有其他C++編譯器替代方案可以嘗試?是否有可能丟失的Red-C++ C++庫?或者它們的C++實現中的主要差異會導致這種情況?

+7

爲了我們的幫助,您必須至少提供G ++編譯器給您提供的錯誤。 – Gui13

+0

當你說'同樣的編譯器'你使用相同版本的g ++嗎?您的配置輸出在兩臺機器上的外觀如何? – PenguinCoder

+0

我有類似的情況,儘管Windows和Linux。這可能是您的代碼依賴於某種未定義的行爲來正常運行,並且出於某種原因,這些行爲只發生在Red Hat Linux上。我的建議是編譯調試符號並通過Valgrind運行你的代碼來捕獲任何錯誤。 –

回答

1

你應該指定第一個錯誤是真的,你沒有提供足夠的信息來說明問題是什麼,但是我猜想缺少一個依賴關係。

任何體面的軟件包都帶有一系列依賴項,您是否檢查過這個並檢查了需求?

在沒有需求和依賴列表的情況下,在這種情況下的一個好的經驗法則是檢查第一個錯誤是什麼並解決這個問題。例如,如果第一個錯誤指出「缺少foolib.h」,那麼您需要爲該機器安裝「foolib」。

1
  1. make all作爲自己的一步,然後檢查一切編譯好。
  2. 運行make tests,然後檢查哪些測試失敗。

這些都是您的第一步,並且可能會讓您獲得大部分途徑。

正如PenguinCoder上面所說的,你需要檢查Ubuntu和Redhat之間的編譯器版本是否相同。每次在gcc進行了主要版本升級時,我都遇到了一些(次要)問題。

6

我看了一下這個軟件。它的輸入代碼有點脆弱,我不確定在這種情況下Ubuntu或Red Hat的C++庫是否有問題,但是可以很容易地修復該程序,以便在兩者上都能正常工作。

在文件PEDIndividualsExtractor.cpp,在功能void PEDIndividuasExtractor::loadInput(),改變行:

while (!stream.eof()) 

到:

while (stream) 

和重新編譯。

2

使用while(!stream.eof())是一個常見的錯誤。如果語句stream.eof()爲真,則不一定意味着流的最後操作成功。

這裏有幾個bash腳本編譯包與GNU g++4.6

wget http://www1.cs.columbia.edu/~gusev/germline/germline-1-5-1.tar.gz 
tar -xzvf germline-1-5-1.tar.gz 
cd germline-1-5-1/ 
perl -p -i.bak -e's/!stream\.eof\(\)/stream/g' PEDIndividualsExtractor.cpp 
perl -p -i.bak -e's/!stream_sample.eof\(\)/stream_sample/g' HMIndividualsExtractor.cpp 
make all 
cat test/generated.out 
+0

你的腳本非常方便和有用,謝謝! –

0

如果您只需要使用Ubuntu的程序,你可以用--static配置程序編譯一個靜態的可執行文件,然後將可執行文件複製到Ubuntu。

或者,您也可以使用ldd命令找出.so對文件鏈接到動態可執行文件,並且這些.so文件複製到動態可執行文件的同一目錄下,並把它們在Ubuntu上運行。您還可以將.so文件放在另一個目錄中,並使用LD_LIBRARY_PATH來幫助可執行文件找到.so文件。

+0

做到了這一點,這裏是我得到的地方:http://unix.stackexchange.com/questions/169754/running-ubuntu-binary-on-centos-with-all-shared-libs-installed-results-in-ld -sig –