Mingw编译带lib的c代码出现cannot find 错误的解决

  某日在研究win32 api,想把自己以前用C#开发的快捷ip修改工具重写。(老衲在学校网络中心勤工俭学,每到开学时节总会出现大批量来网络中心开通网络的学生,每个人都要更改成制定的ip,但是呢,大部分人不会,于是乎自行发粪涂墙)有一部分学生的系统是xp,多数都没装.net。于是老衲的配置工具废掉了。

  老衲也就会一点c,于是再次发粪涂墙。

  在代码中

#include
#include
#include

还需要一个

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

在下用的是国产轻量级IDE:c-free,想来可以在工程选项里面增加就可了,但是后来差知道没这么简单。

  首先给工程添加这个ws2_32.lib,实际上在mingw中它的实际存在是libws2_32.a,好吧,因为老衲当初参考的代码是基于vc来写的,所以才有着微妙的不同。mingw中的lib库都是以lib*.a的形式命名的,所以看到这个vc下的lib到mingw的LIB目录下中相似名字的存在就好。

  来编译一下,然后非常恭喜,报错了[Error] D:\C-FREE~1\mingw\bin\ld.exe: cannot find -lD:\C-FREE~1\mingw\lib\LIBWS2~1.A

 回头看看貌似没什么问题,于是我实在不行再程序里加了这么一句

#pragma comment(lib,"libws2_32.a")//已经添加了系统变量
  但是仍然还是一样的报错,表示这不科学,开始google之路。后来找到了 某大神的文章,表示明了了


 原因大概是:

编译时将自己的头文件目录设为默认头文件目录

 

$gcc-I”Your_Include_Files_Document_Path” -c yours.c -oyours.o

 

这条指令中的-I参数将会把Your_Include_Files_Document_Path添加到你默认的头文件目录中。这样您将可以使用#include来导入头文件。


而c-free中-I参数后面直接连接的是 libs,我猜测指的是lib的文件名(不明,求大神详解)。

报错中提到无法找到-lD:\C-FREE~1\mingw\lib\LIBWS2~1.A,并不是一个正确的文件路径,多了一个-l。(大概是这个样子)

解决方案是把那个“-l”参数去掉就不会报错。

以上在c-free5.0上测试通过。


 





你可能感兴趣的:(Mingw编译带lib的c代码出现cannot find 错误的解决)