ws2_32.lib 与 libws2_32.a,有什么区别以及如何将 libws2_32 链接到 NB 项目?

2024-04-22

我使用 NetBeans、Windows 和 Cygwin 以及 g++ 编译器。

我正在研究 Windows Sockets 2。我所做的一切都是用 MS 编写的manual http://msdn.microsoft.com/en-us/library/windows/desktop/ms737629%28v=vs.85%29.aspx。我有一个代码(主要来自本手册):

#include <winsock2.h>
#include <ws2tcpip.h>

#include <cstdlib>
#include <iostream>

#pragma comment(lib, "Ws2_32.lib")

int main() {

  WSADATA wsaData;

  int iResult;

  // Initialize Winsock
  iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
  if (iResult != 0) {
     printf("WSAStartup failed: %d\n", iResult);
     return 1;
  }
  else cout << "Initialization OK.";

  return 0;
}

当我尝试运行该项目时遇到问题:

undefined reference to `_WSAStartup@8'

我明白那个Ws2_32.lib不见了。这是因为我没有安装Windows SDK。但在安装之前我想尝试一下 Cygwin 提供的工具。它拥有所有w32api头文件,我把它们放在:

C:\cygwin\usr\include\w32api

并且它有一些w32api almost .lib目录中的文件:

C:\cygwin\lib\w32api

但是所有这些lib文件都是不同的,它们有.a扩展名和稍微不同的名称,例如:

libws2_32.a  // in Cygwin
   vs.
ws2_32.lib   // in Windows    

当我使用 Cygwin 终端创建一个.exe文件,一切正常。我输入的命令是:

cd C:\\c++\\myProgram           // go to the dir
g++ myProgram.cpp -lws2_32      // compile using -l option to link libws2_32.a

之后我得到a.exe文件。我运行它并且它有效:

./a.exe    // Initialization OK.

但正如我所说,我使用 NetBeans。如果我尝试从 NB 运行该项目([F6]按钮)我总是遇到这个错误undefined reference to '_WSAStartup@8'.

我已经尝试了在 NB 论坛上可以找到的所有内容。我尝试过链接libws2_32.a以这种方式到我的项目。我去:

File -> Project Properties -> Linker -> Libraries

并且有以下三个选项:

  • 添加库...
  • 添加库文件...
  • 添加选项...

我都试过了。我尝试仅链接库和库文件。我也尝试过 在中添加这样的选项Add Option... button:

Add Option... -> Other option ->    // and I input here "-lws2_32"

但无论我做什么,我都无法从 NB 运行该项目,我收到错误undefined reference to '_WSAStartup@8'.

所以我的问题是:

1)我做错了什么?我怎样才能直接从 NB 运行该项目?我没有尝试安装Windows SDK,我想尝试使用Cygwin工具,因为它有这样的工具。

2) 与Windows有什么区别.lib文件和 Cygwin.a文件?安装 Windows SDK 并忘记这些是不是更好?.a文件?到目前为止我在 Cygwin 网站上能找到的关于它们的所有内容如下:

导入库是一个常规的类 UNIX .a 库,但它仅 包含告诉操作系统您的情况如何所需的微小信息 程序与 dll 交互(“导入”)。此信息已链接 进入你的.exe。这也是由 dlltool 生成的。

3)是否可以使用#pragma comment(lib, "libws2_32.a")链接.a文件?我已经尝试过,但没有得到成功的结果。

UPD:

第三个问题的答案->#pragma comment(lib, "xxx.lib") 在 Linux 下等效吗? https://stackoverflow.com/questions/1685206/pragma-commentlib-xxx-lib-equivalent-under-linux


我在 Eclipse/CDT/Windows 上遇到了这个问题。 这是我的构建命令

g++ -O0 -g3 -Wall -c -fmessage-length=0 -o source\Sever_B.o ..\source\Sever_B.cpp
g++ -LC:\MinGW\lib -o Sever_B.exe source\Sever_B.o -lws2_32

所以关于Eclipse项目属性,C/C++ General,Paths and Symbols

  • 将 C:\MinGW\lib 添加到库路径选项卡
  • 将 ws2_32 添加到库选项卡

这会将 libws2_32.a 链接到我的项目,现在可以正常构建了。

我尝试使用 Windows ws2_32.dll 和 ws2_32.lib,但除了痛苦之外一无所获。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ws2_32.lib 与 libws2_32.a,有什么区别以及如何将 libws2_32 链接到 NB 项目? 的相关文章

  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • 单元测试验证失败

    我正在运行我的单元测试PostMyModel路线 然而 在PostMyModel 我用的是线Validate
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 从模板切换传递的类型

    在 C 中是否可以检查传递给模板函数的类型 例如 template
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • C++ 中 void(*)() 和 void(&)() 之间的区别[重复]

    这个问题在这里已经有答案了 在此示例代码中 func1是类型void int double and funky是类型void int double include
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 如何将 SQL“LIKE”与 LINQ to Entities 结合使用?

    我有一个文本框 允许用户指定搜索字符串 包括通配符 例如 Joh Johnson mit ack on 在使用 LINQ to Entities 之前 我有一个存储过程 该存储过程将该字符串作为参数并执行以下操作 SELECT FROM T

随机推荐