使用Visual Studio从Linux迁移C++库到Windows

本文讲述了作者在将C++代码从Linux迁移到Windows过程中,遇到SparseLib++库在Visual Studio中无法生成相应lib文件的问题。通过分析和尝试,作者发现需要手动添加__declspec(dllexport)宏来指定导出函数,并解决了因头文件未被编译导致的全局函数不导出的困扰,最终成功完成迁移。

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

本人自从正式踏入软件这行以来,就一直在Linux下摸爬滚打,没有在Windows平台正式编写过程序。

不过,最近,公司要把C++代码迁移到Windows下,本来没有小编的事(小编从来都是写些算法的,不管与平台有关的活)。但是前不久,小编为了求解二次规划的问题,特意下载了SparseLib++这个稀疏矩阵库。但是这个库没有提供SparseLib.def文件。在Visual Studio中生成SparseLib.dll时,没有看到相应的用于链接的SparseLib.lib文件。这可急坏了小编。

小编用Visual Studio Tools中的dumpbin命令查看SparseLib.dll

dumpbin /exports SparseLib.dll

不显示导出的函数和变量。这明显没有导出嘛。

之后,小编开始了搜索之旅,从Baidu到Bing(说心里话,查Windows有关的专业问题,Bing还是比Baidu靠谱的)。

主要的就是有两种方法指定exports:

  1. 手动写def文件,文件格式去MSDN看看;
  2. 在code中添加__declspec(dllexport)宏;

第一种方法,费事费力,export的函数那么多,我如何一个个写出。

第二种方法,只要从code的调用关系就可以确定哪些函数是需要的,所以我使用了这种方法。

第二种方法应用于三种情况:

  1. Class __declspec(dllexport) classname { /* class definition */ };
  2. __declspec(dllexport) returntype function(/* argument list */);
  3. __declspec(dllexport) extern Typ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值