Gre*_*een 1 c++ dll linker netbeans winsock2
我使用NetBeans,Windows和Cygwin与g ++编译器.
我正在检查Windows套接字2.我做了用MS 手册编写的所有内容.我有一个代码(主要来自本手册):
#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;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试运行项目时遇到问题:
undefined reference to `_WSAStartup@8'
Run Code Online (Sandbox Code Playgroud)
我明白这Ws2_32.lib是遗漏的.这是因为我没有安装Windows SDK.但在安装之前,我想尝试一下Cygwin提供的工具.它有所有w32api头文件,我有它们:
C:\cygwin\usr\include\w32api
Run Code Online (Sandbox Code Playgroud)
它在目录中有一些w32api几乎.lib文件:
C:\cygwin\lib\w32api
Run Code Online (Sandbox Code Playgroud)
但是所有这些lib文件都不同,它们有.a扩展名和一些不同的名称,如:
libws2_32.a // in Cygwin
vs.
ws2_32.lib // in Windows
Run Code Online (Sandbox Code Playgroud)
当我使用Cygwin终端创建.exe文件时,一切正常.我输入的命令是:
cd C:\\c++\\myProgram // go to the dir
g++ myProgram.cpp -lws2_32 // compile using -l option to link libws2_32.a
Run Code Online (Sandbox Code Playgroud)
之后我得到了a.exe档案.我运行它,它的工作原理:
./a.exe // Initialization OK.
Run Code Online (Sandbox Code Playgroud)
但正如我所说,我使用NetBeans.如果我尝试从NB([F6]按钮)运行项目,我总是有这个错误undefined reference to '_WSAStartup@8'.
我已经尝试过在NB论坛上找到的所有内容.我试图以libws2_32.a这种方式链接到我的项目.我去:
File -> Project Properties -> Linker -> Libraries
Run Code Online (Sandbox Code Playgroud)
有三种选择:
我已经尝试过了所有这些.我试图链接图书馆和图书馆文件.我还尝试在Add Option...按钮中添加这样的选项:
Add Option... -> Other option -> // and I input here "-lws2_32"
Run Code Online (Sandbox Code Playgroud)
但无论我做什么,我无法从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?
我有这个问题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
Run Code Online (Sandbox Code Playgroud)
所以在Eclipse项目属性,C/C++ General,Paths&Symbols上
这将libws2_32.a链接到我的项目,它现在构建正常.
我尝试使用Windows ws2_32.dll和ws2_32.lib,除了痛苦之外什么都没有.