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 项目? 的相关文章

  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • 为什么存在 async 关键字

    浏览 msdn 9 频道视频时 我发现以下未答复的评论 希望有人能解释一下 我不明白 async 关键字的意义 为什么不直接允许 任何时候方法返回任务时都会使用await关键字 就像迭代器一样 可以在任何返回 IEnumerable 的方法
  • clang 格式换行符在错误的位置

    给出以下代码行 get abc manager get platform status abc platform status sw update status fill update status actions allowed stat
  • 分段错误(核心转储)错误

    我的程序编译罚款 但在输入文件时出现 分段错误 核心转储 错误 我没有正确处理 ostream 吗 include
  • 将字节数组转换为托管结构

    更新 这个问题的答案帮助我编写了开源项目GitHub 上的 AlicanC 现代战争 2 工具 https github com AlicanC AlicanC s Modern Warfare 2 Tool 你可以看到我是如何阅读这些数据
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • CultureInfo 的实例(来自相同的文化)根据操作系统而变化

    我有一个网站 上面写着这样的日期 CultureInfo cultureInfo CultureInfo GetCultures CultureTypes AllCultures FirstOrDefault c gt string Equ
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 选择列表逻辑应位于 ASP.NET MVC、视图、模型或控制器中的什么位置?

    我觉得我的问题与这个问题很接近 但我想对这样的代码应该放在哪里进行更一般的讨论 Asp Net MVC SelectList 重构问题 https stackoverflow com questions 2149855 asp net mv
  • 从 C 结构生成 C# 结构

    我有几十个 C 结构 我需要在 C 中使用它们 典型的 C 结构如下所示 typedef struct UM EVENT ULONG32 Id ULONG32 Orgin ULONG32 OperationType ULONG32 Size
  • 获取尚未实例化的类的函数句柄

    我对 C 相当陌生 我想做的事情可能看起来很复杂 首先 我想获取一些函数的句柄以便稍后执行它们 我知道我可以通过以下方式实现这一目标 List
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • C++ 插件的“最适合”动态类型匹配

    我有一个几乎所有东西都是插件的架构 该架构以图形用户界面为基础 其中每个插件都由一个 表面 即用户可以通过其与插件交互的 UI 控件 表示 这些表面也是插件 每当添加新插件时 瘦主机都会自动确定哪个可用表面与其最匹配的 UI 如何在 C 中
  • .NET 客户端中 Google 表格中的条件格式请求

    我知道如何在 Google Sheets API 中对值和其他格式进行批量电子表格更新请求 但条件格式似乎有所不同 我已正确设置请求 AddConditionalFormatRuleRequest formatRequest new Add
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW
  • ASP.NET JQuery AJAX POST 返回数据,但在 401 响应内

    我的应用程序中有一个网页 需要调用我设置的 Web 服务来返回对象列表 这个调用是这样设置的 document ready function var response ajax type POST contentType applicati
  • 从 Delphi 调用 C# dll

    我用单一方法编写了 Net 3 5 dll 由Delphi exe调用 不幸的是它不起作用 步骤 1 使用以下代码创建 C 3 5 dll public class MyDllClass public static int MyDllMet
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同

    System Net WebException 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同 在 System Net FtpWebRequest CheckError 在 System Net FtpWebReque
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne

随机推荐