2011-07-07 55 views
2

我一直在使用VS2008/2010一段時間,並且我將學習如何使用Eclipse Helion進行C/C++開發(主要是C)。幾個Eclipse C/C++問題

我對圖書館有點迷惑,但也包括在內。

1)你如何正確包含winsock2.h例如?我試過這個:

#ifndef CONFIG_H_ 
#define CONFIG_H_ 


/* Windows-Build */ 
#if defined(WIN32) || defined(_WIN32) 
#include <winsock2.h> 
#endif 

SOCKET sock; 

#endif /* CONFIG_H_ */ 

但編譯器dosn't識別SOCKET。你是否需要在某處手動添加winsock2的完整路徑?

2)怎麼樣ws2_32.lib?你在Eclipse中包含哪些內容?你還必須添加一條路徑嗎?

3)使用VS主要我是新的makefile。你如何包含自定義的makefiles?有沒有一個很好的指導,以makefile開始?

4)VS中是否有智能感知?

這就是我現在可以弄清楚的。 謝謝!

編輯: 在響應於第一答案:

Building target: Filesharing_core.dll 
Invoking: Cygwin C Linker 
gcc -L"C:\cygwin\lib\w32api" -shared -o"Filesharing_core.dll" ./src/test.o -llibws2_32.a 
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -llibws2_32.a 
collect2: ld returned 1 exit status 
make: *** [Filesharing_core.dll] Error 1 
+0

您使用哪個工具鏈(MinGW,Cygwin或Visual Studio)?如果您打算使用makefile,則需要MinGW或Cygwin。也可以在項目的屬性中查看'C/C++ General>路徑和符號'。 –

+0

我正在使用Cygwin C編譯器 – KaiserJohaan

回答

2

首先,cygwin的通常使用GCC,因爲它的編譯器。這意味着在VS編譯器和編輯器中沒有特殊的Windows支持。準備好讓你的手變髒。

請記住,我的CDT版本有點舊,我沒有安裝Cygwin,因此下面的一些內容可能不準確。我提到的所有編譯器選項都在gcc manual中詳細說明。

1)在你的樣品,沒有人定義WIN32_WIN32(我不認爲GCC是要爲你做的,但是做檢查)。爲了解決這個問題,你必須包含windows.h頭(我認爲)將會負責定義正確的宏。你也可以使用-D編譯器開關(可以在makefile或eclipse菜單中配置)。

如果您在修復定義後遇到丟失包含錯誤,我相信Windows標頭位於C:\cygwin\usr\include\w32api文件夾中。要將其添加到包含路徑中,只需打開項目屬性並導航至C/C++ General > Paths and Symbols。在Includes選項卡中將路徑添加到GNU C組。取決於你如何配置你的項目,這可能已經爲你完成了。

如果您正在構建自己的生成文件,則仍應執行上一步操作,因爲它將允許索引器查找並解析這些頭文件。要告訴編譯器關於包含文件夾,請使用-I開關。

2)我猜測ws2_32.lib是winsock2的lib文件。如果是這種情況,我不完全確定誰負責構建它(是否有可用的.dll文件?)。您可能需要檢查您的c:\cygwin\usr\lib文件夾或c:\cygwin\usr\local\lib

如果您使用託管項目(eclipse爲您生成makefile),請轉至您的項目屬性並導航至C/C++ Build > Settings。在Tool Settings選項卡中,轉至鏈接器部分中的libraries項目。只需在相應的框中添加lib文件的名稱和文件夾即可。

在你自己的makefile中,你會希望使用-l編譯器開關來指定一個庫,編譯器開關-L指定一個搜索路徑。

3) makefile入門的好地方是GNU make manual

有關在Windows上運行Makefile的一個細節:確保使用由Cygwin或MinGW提供的shell。否則,像rm這樣的命令將不會被定義,它會讓你的生活變得非常困難。您可能還想考慮CMake。更容易使用和擴展到更大的項目。

要在項目中使用手工makefile,只需創建一個新的Makefile project並將Makefile文件轉儲到項目文件夾的根目錄下。而已。

4)是的,但它不是所謂的intellisense。只需在源代碼中的任意位置點擊CTRL+Space即可啓動它。

其他有趣的工具可以在右鍵菜單中找到。我的個人最愛包括CTRL+SHIFT+R找到並打開一個文件,CTRL+SHIFT+T找到並打開一個類型\變量\函數\定義和CTRL+O找到並得到一個類型\變量\函數\定義在打開的文件。

索引器有時可能會有點瘋狂(主要是在解析C++代碼時)。您可以在頂部的Windows > Preferences菜單中修改其行爲,並導航至C/C++ > Indexer項目。

我希望這會有所幫助。

+0

很好的答案!儘管我在圖書館遇到問題。我在C:\ cygwin \ lib \ w32api中找到了winsock2 cygwin-variant(名爲libws2_32.a)。我已經將該路徑添加到「庫路徑」,並將libws2_32.a添加到「庫」。我仍然得到一個錯誤,它找不到找到圖書館 - 我編輯錯誤到我原來的文章 – KaiserJohaan

+0

@凱瑟爾我記得有這個問題,以及我不記得我曾經使用它的奧術巫術咒語。嘗試從lib文件中刪除擴展名或將文件夾斜槓更改爲unix樣式(替換\ by /)。它也可能與cygwin shell的路徑與Windows中的路徑('/ c/cygwin/...'與'C:\ cygwin \ ...')有關。哦,並嘗試以上任何組合。 –

+0

無法弄清楚:|它應該是/ usr/lib/w32api,如果我打開cygwin shell這是庫的正確位置 – KaiserJohaan