2012-03-02 120 views
0

我是一個頑固的.NET開發人員,在C++方面經驗有限。我非常熟悉快樂解釋的語言(和腳本語言)如何跨平臺工作,但C++又如何?我知道GCC/GPP和一些其他編譯器使用正確的編譯器標誌工作多平臺,我知道STL是編譯器之間的規範化,但我還缺少什麼?我需要進行音頻輸入/輸出,高精度計時器,我需要做多線程。我不認爲STL支持任何這些東西,所以我需要一個跨平臺的某種類型的庫,對吧?我應該使用哪一個?跨平臺C++工具鏈

我打算支持最新的Mac和Windows平臺。這是一個共享框架/ sdk,不會有UI。我計劃使用Objective-C/Cocoa和.NET/WPF等本地語言編寫用戶界面(兩者都具有出色的本機用戶界面支持)。

那麼我的工具鏈應該是什麼樣的?我應該使用GCC/GPP還是MinGW?我應該整合哪些其他「圖書館」,它們的功能將跨越平臺?我想將我的構建環境設置爲「正常工作」,以便我可以構建兼容Mac的二​​進制文件和兼容Windows的二進制文件(32位和64位)。我怎樣才能做到這一點?

此時,我將爲每個平臺編寫代碼,以便可以與我的C++多平臺框架sdk/api thingy進行互操作。在Windows中,我認爲這看起來像一個託管的DLL,是嗎?有關我如何在Mac上執行此操作的任何想法?

任何意見或建議?

感謝您的建議, 佈雷特

+1

如果您使用最近的編譯器(它在C++ 11中是新的),則支持STL中的線程化。 GCC 4.6和MSVC支持它,我敢打賭也是。 – 2012-03-02 00:27:32

+0

@ J.N。是的,clang/libC++支持'std :: thread'。 – bames53 2012-03-02 00:37:41

+0

既然.Net語言是原生的, (除了C++/CLI之外)在嘗試這樣的事情之前,清理「native」的定義以及它與C++和跨平臺的關係(以及編譯器如何不跨平臺構建)可能會有用。 – ssube 2012-03-02 00:41:09

回答

3

1)真實的目標應該是編寫可移植C++ - 你保持你的語言使用清潔,不使用特定的編譯器得到的便攜性。

2)你想要的一些東西,如音頻I/O,相當固有地取決於平臺。但是,您可以乾淨地隔離特定模塊中的平臺依賴關係,並有條件地編譯每個平臺上的一組平臺支持文件。

3)類似多線程的東西可以使用標準庫以獨立於平臺的方式完成。

1

陷入主觀領土但是用於與大合作的開發商,做它,都挺喜歡這些框架我們在.NET中發現,QT很可能是你的最好的跨平臺C++比喻(雖然我不是它的粉絲)。你有你的線程,XML I/O,本地化,套接字,高精度計時器,GUI構建模塊等。

[...],我需要做多線程。我不認爲這些事情 在STL支持[...]

只是一個小的事情,但STL僅限於描述骨料容器和C++標準庫的通用算法。它並不是同義詞,但C++ 11在標準庫中提供了用於併發支持的規範。然而,流行的編譯器仍然很難完全支持它。你也有提升,如果你需要線程暫且:http://www.boost.org這是一個非常的跨平臺庫。

至於構建一個可以愉快地插入各種環境(.NET,Cocoa等)的API,最好的,最多的跨平臺選擇實際上是公開一個C API(你可以自由地使用它來實現它C++)。這將導致至少頭痛這種方式(有名字改編沒有任何問題,試圖用複雜的,用戶定義的C++類型等方面互操作)。

在開始嘗試開發一個宏庫之前,我建議你在C++中構建DLLs /共享庫作爲一種擴展.NET和Cocoa應用程序的方法(例如:用於Objective-C的C++模塊)。這裏

0

對於計時標準庫有<chrono>,它在Mac上的分辨率爲納秒。不幸的是,它僅在VS11 Beta上獲得了毫秒級的分辨率。我希望他們能夠毫不遲疑地解決它。