无法解析的外部符号——shell32.lib——VS宏定义问题——%(AdditionalDependencies)

 

严重性    代码    说明    项目    文件    行    禁止显示状态
错误    LNK2019    无法解析的外部符号 __imp_SHGetSpecialFolderPathA,该符号在函数 "public: static class SEACAVE::String __cdecl SEACAVE::Util::getApplicationFolder(void)" (?getApplicationFolder@Util@SEACAVE@@SA?AVString@2@XZ) 中被引用    InterfaceCOLMAP    D:\3dRecon\openMVS\release\apps\InterfaceCOLMAP\Common.lib(Util.obj)    1    
 

 

无法解析的外部符号  通常是找不到库。比如,但不限于shell32.lib。

解决方法通常有,手动链接相应库。

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

 

那么为什么别人机器上跑着很正常的工程,在我这,需要额外引用库呢?

区别来自于%(AdditionalDependencies)

这个是从本机继承的,和自己的机器有关,而没有随着工程复制而改变。别人的这个参数包含了shell32.lib,而我的不包含,这就是区别

 

 

问题找到了,那么,怎么改?

一般来讲,这个东西躺在props文件里

那么问题是,我这个工程拿的是哪个props?

 

从属性管理器去找。

 

 

其实这里是有的,但是很显然,有很多个,尤其opencv3.4.2可能是我自己定义的,可能被default了。

如下,opencv3.4.2没有这几个常规默认项。

(问题是,这一堆props,到底以谁为准?还是“从父级或项目默认设置继承”互相冲掉了?)

观察现象:opencv342是继承的libboost

boost继承空,断掉了

 

 

(后三个灰色的不能改)前三个好像顺序依赖,但是在boost断了,boost是拷贝过来的props,可能在找系统变量时出错了。

 

怎么改?不要再属性管理器双击,搜到文件,拖进VS,直接改。

再重新打开一下VS,继承成功。

注销掉主动链接,编译成功

 

更简单方法就是手动加shell32.lib,不用写进任何变量内,但是一旦工程项多,你需要给每个都手动加一次。(这方法的愚蠢程度,无异于直接写pragma comment)

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值