2012-06-25 147 views
0

我有一個執行圖像匹配的visual C++程序。我正在使用openCV。我正在尋找在Linux服務器上運行該exe文件。但我不知道如何在Linux中編譯visual C++代碼?編譯linux中的visual C++代碼?

任何人都可以在這方面幫助我。 。 。

+4

請看,Visual C++只是微軟的C++編譯器......你的意思是你想知道如何在Linux中編譯C++代碼?GCC可以做到這一點,但你可能會有更多的工作移植代碼不僅僅是編譯。 – lvella

回答

4

如果您在MSVC中編寫C++代碼時巧妙地做了些事情,那麼您從一開始就將所有與平臺有關的代碼(即Microsoft的C++擴展和僅使用Windows的庫)隔離開來,並且確切知道在哪裏做修改,以使其在Linux上運行。

不幸的是,您的問題暗示這是您第一次嘗試跨平臺編碼,在這種情況下,您可能會在整個代碼中散佈微軟主義,並且必須逐個挑選它們。啓動編譯器,查看其錯誤消息,然後從那裏開始。祝你好運,這將是一個痛苦,但也是你的下一個項目非常寶貴的教訓。

(我不是在MSVC手指指指點點。而在同是人誰垃圾的代碼GNU-主義,然後想把它編譯於MSVC真...)

通常構建這個樣子的:

#if defined(_MSC_VER) 
// Microsoft version 
#elif defined(__GNUC__) 
// GCC version 
#else 
#error Platform/compiler not supported. 
#endif 

編輯:如果不是很明顯,這個想法是在一個絕對最低,以保持上述ifdef'ed代碼。使用typedef的轉發函數(即,使用log()來使用Unix或Windows日誌記錄),或者 - 如果所有其他都失敗 - 宏。 不要使用上面所有的代碼,將它隔離在一些頭文件/實現文件中,保存在一個單獨的源文件夾中。

您還需要熟悉Makefiles(無恥插件:Makefile tutorial),因爲MSVC項目文件在Linux上不起作用(顯然)。 Makefile文件,在另一方面,可以很漂亮的Windows上工作,以及(例如,通過Cygwin,如果你願意鑽研如何調用命令行MSVC編譯器,大致沿着這些線路:

ifeq ($(OSTYPE),linux) 
    CC := gcc 
else 
    CC := cl.exe 
endif 
+0

熟悉Make後,您可以查看CMake。它有相當簡單的語法,並允許生成Visual,Eclipse,Make和其他一些項目文件。而且它的配置文件非常輕巧(純文本文件) – morynicz

+0

@Link:我個人並不在乎Visual,Eclipse等,所以我既不能關注你的推薦,也不能說任何反對。儘管在編譯C源代碼時沒有任何相關的環境,Make仍然會讓我的船漂浮。 – DevSolar

0

有還有winelib和東西,指向你的編譯系統,使用winegcc/wineg ++作爲你的編譯器,並且可以編譯它,它可以編譯一個相當大的windows程序子集,如果你需要的只是獲得一個或兩個程序工作