vc上的socket实现c/s间的通信,采用c代码,编译通过;
但再将代码移到eclipse上,却出现n多问题:
1、#pragma comment(lib,"ws2_32.lib") [使用vc通信常用的连接库加载语句]
*****warning: ignoring #pragma comment [-Wunknown-pragmas]
ld.exe cannot f ind -l WS2_32.Lib
或者是一大堆的如下东东
*****
tmp/ccxABKPU.o:coco.c:(.text+0x2f): undefined reference to `_send@16'
/tmp/ccxABKPU.o:coco.c:(.text+0x78): undefined reference to `_WSAStartup@8'
/tmp/ccxABKPU.o:coco.c:(.text+0x89): undefined reference to `_socket@12'
。。。
原因:eclipse不支持ws2_32.lib这个库,(支持pragma语句否?)
解决方法:采用eclipse安装目录lib\中自带的libws2_32.a静态库,
即在项目名右键--》properties-->>c/c++ build-->>tool settings-->>mingw c linker -->>libraries 在右侧libraries(-l)点+添加“ws2_32”即可;
2、#include
使用mysql的API链接时出错,undefined reference to mysql_init@4
....
原因:不明;但有解决方法如下:
1)考虑头文件包含:将mysql.h的头文件所在的目录加入eclipse的包含路径中
即在项目名右键--》properties-->>c/c++ build-->>tool settings-->>gcc c compiler-->>includes, 在右侧同上,添加完整目录;
2)若还是出现链接问题,那就这样:
eclipse对于lib库上链接有点问题(具体?),可以将.lib转换为.a的静态库,在包含到eclipse中(同上)。
3、如何将把库文件从msvc格式(.lib)转化成MinGW格式(.a)的方法
工具:DEV-C++ 、 mingw-utils(主要是使用它自带的Reimp工具);
代码:进入cmd下
cd c:\mysql\lib\opt(先切换到自个安装的目录)
Reimp -d libmysql.lib ==》生成libmysql.def文件
Dlltool --input-def libmySQL.def --dllname libmySQL.dll --output-lib libmySQL.a -k ==》生成libmysql.a文件;
具体讲解可以参考:https://www.wendangku.net/doc/f716339214.html,/top5/archive/2011/02/18/1958093.html
4、libxml问题
这家伙问题还真不是一般的多:
1)头文件路径包含,这是必须的;
2)*****
undefined reference to '_imp_xmlFree'
undefined .... ‘xmlParseFile’
....
原因:貌似和第二个问题一样,库的链接出了问题(?)
解决:
<1>生成.lib到.a的文件;
<2>关于imp_xmlFree的问题:
方法:修改xmlexports.h。。。
即先将
这段注释掉,改为:
#if defined(_WIN32) && defined(__MINGW32__)
#define XMLPUBFUN
#ifdef __cplusplus
#define XMLPUBVAR extern
#else
#define XMLPUBVAR
#endif
#if !defined _REEN TRAN T
#define _R EEN TRANT
#endif
#endif
不过我在编译时,总是出现:
*****
C:\Program Files\libxml2-2.6.22.w in32\include/libxml/xmlexports.h:140:0: war ning: "XMLPUBVAR" redefined [enabled by default]
C:\Program Files\libxml2-2.6.22.w in32\include/libxml/xmlexports.h:36:0: note: this is the location of the previous
definition 。。。
所以我习惯在加一句: #undef XMLPUBVAR在第二行。