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

作者使用C语言重新编写了一款快捷IP修改工具,解决了因系统限制导致原有工具失效的问题,适用于XP系统且未安装.NET环境的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  某日在研究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上测试通过。


 





### 使用 MinGW 编译 DCMTK 的方法 为了成功使用 MinGW 编译 DCMTK,可以按照以下方式配置环境并完成编译过程。以下是详细的说明: #### 1. 准备工作 确保安装了必要的工具链和依赖项: - **MinGW**:下载并安装适合操作系统的版本[^2]。 - **CMake**:用于生成构建文件,建议使用最新稳定版。 #### 2. 下载源码 从官方 GitHub 镜像获取最新的 DCMTK 源代码[^1]: ```bash git clone https://github.com/DCMTK/dcmtk.git cd dcmtk ``` #### 3. 创建构建目录 为了避免污染源代码目录,在根目录下创建一个新的构建目录: ```bash mkdir build_mingw && cd build_mingw ``` #### 4. 配置 CMake 参数 运行 `cmake` 命令时指定 MinGW 工具链以及所需的选项。例如: ```bash cmake .. \ -G "MinGW Makefiles" \ -DDCMTK_BUILD_APPLICATIONS=OFF \ -DBUILD_SHARED_LIBS=ON \ -DDCMTK_ENABLE_STL_STRING=ON \ -DDCMTK_WITH_PNG=ON \ -DCMAKE_C_COMPILER="path/to/mingw/bin/gcc.exe" \ -DCMAKE_CXX_COMPILER="path/to/mingw/bin/g++.exe" ``` 上述命令中的参数解释如下: - `-G "MinGW Makefiles"`:告诉 CMake 使用 MinGW 构建系统。 - `-BUILDSHARED_LIBS=ON`:启用共享库支持[^3]。 - `-DCMAKE_C_COMPILER` 和 `-DCMAKE_CXX_COMPILER`:显式设置 GCC/G++ 路径。 #### 5. 执行编译 一旦 CMake 成功生成构建脚本,执行以下命令启动编译流程: ```bash mingw32-make ``` 如果一切正常,最终会在 `build_mingw/lib` 中找到生成的 `.dll` 文件(动态链接库),而在 `build_mingw/bin` 中则会发现可执行程序。 #### 6. 测试与验证 通过简单的测试案例确认编译后的功能是否正确无误。比如尝试加载 DICOM 图像或解析元数据来检验核心模块的工作状态。 --- ### 提供一段示例代码片段展示如何调用已编译好的库函数读取DICOM标签值 假设已经完成了以上步骤,则下面是一个基本的例子演示如何利用该库提取患者姓名的信息: ```cpp #include "dcmtk/config/osconfig.h" #include "dcmtk/dcmdata/dctk.h" int main(int argc, char *argv[]) { if (argc != 2) { std::cerr << "Usage: dcmdump <filename>" << std::endl; return 1; } OFString patientName; DcmFileFormat fileformat; if (fileformat.loadFile(argv[1]).good()) { // 加载DICOM文件 if(fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good()){ cout<<"Patient's Name is:"<<patientName<<endl; }else{ cerr<<"Could not find Patient's name."<<endl; } } else { cerr << "Error: cannot read file " << argv[1] << endl; } return 0; } ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值