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

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

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

  在代码中

#include<stdio.h>
#include<stdlib.h>
#include<winsock2.h>

还需要一个

#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<your_include.h>来导入头文件。


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

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

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

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


 





评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值