c - 几个 Eclipse C/C++ 问题

标签 c windows visual-studio eclipse makefile

我已经使用 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?有没有关于从 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

最佳答案

首先,cygwin 通常使用 GCC 作为编译器。这意味着您不会在 VS 编译器和编辑器中找到特殊的 Windows 支持。准备好弄脏你的手。

请记住,我的 CDT 版本有点旧,而且我没有安装 Cygwin,所以下面的一些内容可能不准确。我提到的所有编译器选项在 gcc manual 中都有详细说明。 .

1) 在您的示例中,没有人定义 WIN32_WIN32(我认为 GCC 不会为您做这些但一定要检查)。要解决此问题,您必须包含 windows.h header ,(我认为)它将负责定义正确的宏。您还可以使用 -D 编译器开关(可在您的 makefile 中或通过 eclipse 菜单进行配置)。

如果您在修复定义后遇到丢失的包含错误,我相信 Windows header 位于 C:\cygwin\usr\include\w32api 文件夹中。要将其添加到您的包含路径,只需打开您的项目属性并导航到 C/C++ General > Paths and Symbols。将路径添加到 Includes 选项卡中的 GNU C 组。根据您配置项目的方式,这可能已经为您完成。

如果您使用自己的 makefile 进行构建,您仍应执行上一步,因为它将允许索引器查找和解析这些 header 。要告诉编译器有关包含文件夹的信息,请使用 -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 项目 并将您的 Makefile 文件转储到项目文件夹的根目录中。就是这样。

4) 是的,但它不叫智能感知。只需在源代码中的任意位置按 CTRL+Space 即可调出它。

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

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

希望对您有所帮助。

关于c - 几个 Eclipse C/C++ 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6604732/

相关文章:

结构的 C 指针 - 段错误

c - 定义指向结构数组的指针

windows - Azure DevOps Windows 与 Ubuntu 跨平台应用程序托管代理?

c++ - 将文件放在 Visual Studio 2015 的控制台命令行中

json - 将一个目录中的所有 JSON 文件合并到一个文件中 - Windows

c - SymFromAddr 与给定地址的调试器符号不匹配

visual-studio - 在 .NET Core 目标中创建 Azure Function 项目 .NET Framework

c - 这个宏定义了什么?

c - IAR 使用不同的 #define 构建库

c++ - 如何在 wxWidgets 应用程序中获取 Internet Explorer?