【问题标题】:A couple of Eclipse C/C++ questions几个 Eclipse C/C++ 问题
【发布时间】:2011-07-07 00:58:07
【问题描述】:

我使用 VS2008/2010 已经有一段时间了,我将学习使用 Eclipse Helions 进行 C/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_ */

但编译器无法识别 SOCKET。您是否必须在某处手动添加到 winsock2 的完整路径?

2) ws2_32.lib 怎么样?您在 Eclipse 中的哪个位置包含它?是否也需要添加路径?

3) 主要使用 VS,我是 makefile 的新手。您如何包含自定义生成文件?是否有从 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

【问题讨论】:

  • 您使用的是哪个工具链(MinGW、Cygwin 或 Visual Studio)?如果您打算使用 makefile,您将需要 MinGW 或 Cygwin。还可以查看项目属性中的C/C++ General &gt; Paths and Symbols

标签: c windows visual-studio eclipse makefile


【解决方案1】:

首先,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 &gt; Paths and Symbols。在Includes 选项卡中添加GNU C 组的路径。根据您配置项目的方式,这可能已经为您完成了。

如果您使用自己的 makefile 进行构建,您仍应执行上一步,因为这将允许索引器查找并解析这些标头。要告诉编译器包含文件夹,请使用-I 开关。

2) 我猜ws2_32.lib 是winsock2 的lib 文件。如果是这种情况,我不完全确定谁负责构建它(是否有 .dll 可以代替使用?)。您可能需要检查您的 c:\cygwin\usr\lib 文件夹或 c:\cygwin\usr\local\lib

如果您使用的是托管项目(eclipse 为您构建 makefile),请转到您的项目属性并导航到 C/C++ Build &gt; Settings。在Tool Settings 选项卡中,转到链接器部分中的libraries 项。只需在相应的框中添加 lib 文件的名称和文件夹即可。

在您自己的 makefile 中,您需要使用 -l 编译器开关来指定库,并使用 -L 编译器开关来指定搜索路径。

3) GNU make manual 是开始使用 makefile 的好地方。

关于在 Windows 上运行 Makefile 的一个细节:确保使用 Cygwin 或 MinGW 提供的 shell。否则,像rm 这样的命令将不会被定义,这会让你的生活变得非常困难。

您可能还想考虑CMake。它更易于使用,并且可以更好地扩展到更大的项目。

要在您的项目中使用手工制作的 makefile,只需创建一个新的 Makefile project 并将您的 Makefile 文件转储到项目文件夹的根目录中。就是这样。

4) 是的,但它不称为智能感知。只需在源代码中的任意位置点击CTRL+Space 即可启动它。

其他有趣的工具可以在右键菜单中找到。我个人的最爱包括CTRL+SHIFT+R 查找和打开文件,CTRL+SHIFT+T 查找和打开类型\变量\函数\定义和CTRL+O 在打开的文件中查找并转到类型\变量\函数\定义。

索引器有时会有点疯狂(主要是在解析 C++ 代码时)。您可以通过进入顶部的 Windows &gt; Preferences 菜单并导航到 C/C++ &gt; Indexer 项来修改其行为。

我希望这会有所帮助。

【讨论】:

  • 很好的答案!我在图书馆有问题。我在 C:\cygwin\lib\w32api 中找到了 winsock2 cygwin-variant(名为 libws2_32.a)。我已将该路径添加到“库路径”,并将 libws2_32.a 添加到“库”。我仍然收到一个找不到库的错误 - 我将错误编辑到我的原始帖子
  • @Kaiser 我记得我也遇到过这个问题,我不记得我用来使它起作用的奥术伏都教咒语。尝试从 lib 文件中删除扩展名或将文件夹斜杠更改为 unix 样式(将 \ 替换为 /)。它也可能与 cygwin shell 的路径与 Windows 中的路径有关(/c/cygwin/...C:\cygwin\...)。哦,试试上面的任何组合。
  • 想不通:|它应该是 /usr/lib/w32api,如果我打开 cygwin shell 那是库的正确位置
  • @Kaiser 在我的项目中,它看起来像这样:-l 框有libwhatever,-L 框有C:/cygwin/somewhere/nowhere。我可能忘记了某处的其他设置或环境变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 2018-02-26
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
相关资源
最近更新 更多