vs2013 error LNK2001: 无法解析的外部符号

error LNK2001第一种情况:

构建动态库的时候,报错:error LNK2001: 无法解析的外部符号  **.def

错误    178    error LNK2001: 无法解析的外部符号 input_Control    *** vlc-2.2.4.32-2013-master-record\vlc-2.2.4.32-2013-master\libvlccore\libvlccore.def    1    1    libvlccore

原因是input_Control函数在input目录下的control.c中,而libvlccore工程包下的3个目录包含内容不同,文件名相同的control.c。情况如下:

在编译libvlccore工程的时候。生产的编译文件都是control.obj ,这样会导致后编译的覆盖最开始编译出来的control.obj,从而出现*.def中连接错误的情况。

我遇到的问题是:在Debug下,编译libvlccore没有问题,而在Release下编译就出现上面的错误,很是费解,因为我libvlccore的Release属性是按照Debug配置的。好久之后才查到原因,如上:相同的control.c,后编译的覆盖掉之前编译的control.obj。

在Debug模式下不同的control.c在Debug模式下做了配置,其编译会生成不同名字的obj <control1.obj, control2.obj, control3.obj>。但是Release是我自己配置的,对不同目录下的control.c没做生成差异化obj文件名的配置,默认都是生成control.obj, 结果这个contol.obj到底对应哪个control.c文件,就看编译器的了。以至于出现上面的错误。所以我们要找到libvlccore下的所有control.c,其Release属性都按照其对应的Debug模式修改:

更好的方法是改工程文件(两中方式,一是加Release,二是直接去掉 condition="***" 的文字),一个文件一个文件的去属性界面改太费劲。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值