2011-04-15 117 views
0

我有一個更新的cygwin-full install,mingw,windows系統上的代碼塊。 我有一個基於輸入執行xml生成的C++程序。如何從Windows g ++ cygwin交叉編譯獲取linux可執行文件

我知道要爲unix構建一個可執行文件,我們使用makefiles。 makefile是典型的項目文件。 因此,我使用插件cbp2make.exe來獲取cbp項目文件的生成文件。我試圖在cygwin中執行make。希望得到一個linux可執行文件。但這顯然是錯誤的。

一個典型的測試C++測試程序test.c將在cygwin中使用gcc交叉編譯選項進行編譯。

g++-linux -o test test.c 

這將給我們的Linux可執行文件測試,或者如果沒有指定名稱,將給予一個a.out

這是一切都很好了,沒有包含的頭文件一個簡單的C++程序。

我明白當我們處理很多外部庫文件的C++文件時,簡單的g++ -o ourprojfile.exe ourprojectfile.cpp不起作用,因此我們需要使用make文件。 問題1:我錯在假定這*

問題2:如何才能建立交叉編譯直接從代碼塊獲得一個Linux的可執行文件。


更新:我到底問題似乎缺少我認爲包括在主文件我依賴的cpp文件。 解決的辦法是將它們包括在主文件或簡單的寫處理,像這樣

g++-linux myprog_linux main.cpp first.cpp second.cpp third.cpp 

現在的問題是後我得到的Linux的可執行文件。 當我嘗試Linux機器上運行它,我得到的

/usr/local/folder/myfile/my_prog_nix: error while loading shared libraries: 
libstdc++.so.5: cannot open shared object file: No such file or directory 

我需要做此明確什麼樣的鏈接的錯誤?

+1

交叉編譯相當棘手和麻煩。既然你只是瞄準linux,那麼只需安裝linux並編譯就可以了。你也可以只用一臺虛擬機來安裝linux。 – 2011-04-15 07:54:35

回答

2

你錯了,假設你需要makefile。任何建築商都會這樣做。重要的一點是,你必須建造者告訴:

  • 呼叫g++linux代替g++(或mingw-g++或任何它調用)
  • 設置正確的路徑,尋找包括和圖書館。編譯器會知道在哪裏查找自帶的系統庫,所以你只需要處理任何額外的東西。

通常生成文件調用CC對於C源和CXX給出C++源的編譯器和分別把它們傳遞的CFLAGSCXXFLAGS作爲附加參數的內容。但你可能只是告訴CodeBlocks(但我從來沒有使用它,所以我不知道)調用不同的編譯器,並避免所有的業務。

+0

好的。所以問題在於設置正確的路徑來查找包含的庫。你可以發佈如何完成這個示例代碼?如果我們說一個test.c文件及其相應的test.h文件。 – 2011-04-15 08:56:23

2

確保您有GCC交叉編譯器Cygwin的安裝Cygwin中:

http://sourceforge.net/projects/metamod-p/files/

解壓到Cygwin的根目錄,然後從Cygwin的使用編譯: G ++ - Linux的 或 G ++ - Linux的x86_64

+0

酷!如果它真的工作:-) – Jurlie 2011-04-15 08:07:52

+0

** - 1 **正如我已經在後我已經提到的安裝,這是我已經在編譯正常測試文件。如果我們對包含頭文件的main.cpp文件執行此操作,則會在g ++中提供未聲明的類型錯誤-linux和g ++在此範圍內沒有聲明類型錯誤。 – 2011-04-15 08:27:18

1

爲了交叉編譯,您必須使用linux代碼生成器來獲取(或構建)gcc的自定義程序集。由於這不是一項簡單的任務,因此最好將源代碼移至linux機器並在那裏進行本地構建。

0

如果你想從Windows爲UNIX構建,我認爲你使用了錯誤的編譯器。
的MinGW-W64有一個Ubuntu的整潔的目標編譯器(11.04,和64位)和BSD目標編譯器

如果你想與你的主機作爲窗口x64和你的目標,因爲這些2個OS與2種口味編譯

的處理器作爲目標,你需要mingw-w64,個人構建,vityan。

MinGW的-W64項目是在http://sourceforge.net/projects/mingw-w64/(由於上sourceforge.net MinGW的-W64項目正在向mingw-w64.org我建議使用mingw-w64.org

https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20NonWin/vityan/

你應該有一個可能下載之前sourceforge帳戶(您可能可以將https更改爲http也許)。

cygwin是UNIX工具移植到Windows和編譯器,我認爲它實際上是從自動生成區域中的mingw-w64。 cygwin是windows的目標。其目的是爲開發人員提供一個類似於UNIX的UNIX環境。

0

解壓成Cygwin的根,然後從Cygwin的使用編譯:克++ - Linux或克++ - Linux的x86_64的

實際上必須重命名/bin/g++-linux-4.1和/ bin/gcc-linux-4.1

+2

這看起來應該是對現有答案的評論... – PearsonArtPhoto 2012-11-18 17:06:33

相關問題