2011-03-14 83 views
0

我是第三年計算機科學專業的學生。我在Visual C++中被提出並且非常熟練地使用它。然而,我的學校主要在Linux平臺上進行教學。到目前爲止,我已經在Visual Studio中進行了編程和調試,然後當我確定自己能夠正常工作時,我會在Linux中重新編譯源代碼以確保它在那裏工作。在Visual Studio中使用Unix Api編寫C/C++?

但現在我的項目需要使用Unix API調用,Berkly套接字和有時使用pthread。

是否有可用的庫可以訪問Windows上的Unix API?如果是的話,我將如何去使用它們的Visual C++ 2010?

我真的不想使用Gedit和Gdb來調試複雜的(至少對我來說)代碼。

+3

歡迎來到現實世界。我們不能總是獲得我們想要的開發工具和環境 - 不幸的是。 – 2011-03-14 00:47:26

+0

在虛擬機中運行Linux不是一個選項嗎?作爲一名學生,學習Linux編程可能會讓你對未來的僱主更有吸引力。 – 2011-03-14 01:28:43

+0

問題是我是一個非常直觀的學習者;這與學習障礙有關。我還沒有找到一個IDE,它是Unix/Linux的原生代碼,與Visual Studio具有相同的表現力和功能,特別是在調試時。 不得不使用GDB之類的東西進行調試,使編碼速度和調試速度降到最低。 – agent8261 2011-03-14 04:19:39

回答

1

通常,您只需使用在各種庫中找到的與平臺無關的等價物 - 通常是Boost。但是,如果您的必須使用特定於Unix的API,唯一的辦法就是將其功能包裝到Windows中。很可能,已經有這樣的庫來達到這個目的,就像你可以在Unix中使用WINE等一樣,但作爲一個Windows程序員我自己並不知道。

+0

可能你正在考慮像CygWin這樣的東西,但我不認爲這是個好主意。 – 2011-03-14 01:05:49

+0

+1表示使用平臺無關的解決方案,如提升。 – 2011-03-14 01:29:33

+0

理想情況下,我會使用平臺無關的解決方案。但是,當涉及到學校的作業時,我無法選擇教授代碼如何包含文件。 – agent8261 2011-03-14 04:22:35

0

大多數只有Unix的API不適用於Windows。我建議你切換到Code :: blocks,這是跨平臺的。它在很多方面與VC++非常相似,並且很容易習慣它。

0

要麼切換到Code :: blocks,要麼切換到Eclipse--它們都是多平臺的。我可以證明Eclipse 3.6能夠在Linux和Windows上調試C++ Qt應用程序。

1

你可以嘗試像Cygwin那樣在Windows中提供Unix API,在那裏編譯和編譯,然後在轉移到Linux時做一些小的調整來使用本地API。

您還可以檢查每個庫以查看Windows版本是否可用。如果在lib網站上沒有列出Win版本,那麼Google會查看是否有人爲Windows構建了它;這可能會爲您提供可用的版本。

如果您不特別需要Unix API,Boost或其他跨平臺庫可能是您提供所需功能的最佳選擇。

對於非Windows開發,尋找替代VS可能是一個好主意(不幸的是,真的沒有可以比較的IDE,IMO)。 Code :: Blocks是最近的,但仍然缺少很多功能。 KDevelop多次向我推薦,乍一看似乎很好。 Eclipse可能是唯一比VS2010慢的IDE,在使用之前需要考慮一些。

0

我知道這是晚了,但一個好的答案永遠不會太晚!希望我是一個。

我能想到的唯一的事情就是使用預處理器。

#ifdef __unix__ 
    ...UNIX code here 
    #endif 

並在該塊中寫入UNIX代碼,以便您可以在UNIX系統上編譯所需的代碼。然後,這些塊以外,你可以使用類似的塊內的WIN32類似物

#ifdef _WIN32 
    ...Windows code here 
    #endif 

使得最終的結果可能看起來像

//Cross platform includes 
//cross platform namespaces 
#ifdef _WIN32 
    //Windows includes 
    //Windows namespaces 
#else 
    //unix includes 
    //unix namespaces 
#endif 

int main() 
{ 
    DoCrossPlatformFunctions(); 

    #ifdef _WIN32 
    DoWindowsFunctions(); 
    #else 
    DoUnixFunctions(); 
    #endif 

    DoMoreXplatformStuff(); 
    return 0; 
} 

你可以做一些簡短的研究,並找到類似物的功能你需要相當容易,然後在你的路上。這有點麻煩,但是因爲你似乎有一種仇恨,只是把它寫在UNIX虛擬機中首先它可能是最好的選擇。最好的部分是你不必走出你的Visual C++舒適區來做到這一點。我希望這有幫助!!

相關問題