关于lib静态链接问题

dk43658 2015-10-09 10:33:18
在VC中
#pragma comment(lib, "xxx.lib")
VS早期版本,直到VS2013都没有问题,但在vs2015下,有以下提示:

error LNK2019: 无法解析的外部符号 _sscanf
说明lib中用到这个函数,但这个函数却没有定义实现。直接在vs2013及vs2015中均无法搜索到有 声明 _sscanf 的文件。

有什么办法能链接到 _sscanf 的实现函数?或者因为sscanf、sscanf_s这样的函数在系统中有,能不能让lib中的_sscanf替换成sscanf? 用#define _sscanf sscanf 似乎不起作用。
...全文
719 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunxflower 2016-01-13
  • 打赏
  • 举报
回复
太好了,完美解决。谢谢你。
zxtxin 2015-10-30
  • 打赏
  • 举报
回复
解决方案找到了。 在vs2015工程选项,链接器附加依赖项里面添加legacy_stdio_definitions.lib即可。 出现这个问题的原因是vs2015默认编译时将许多标准库采用内联方式处理,因而没有可以链接的标准库文件,所以要专门添加标准库文件来链接标准库中的函数。 参考:https://connect.microsoft.com/VisualStudio/feedback/details/1030022/missing-stdio-identifiers-with-external-linkage http://stackoverflow.com/questions/32418766/c-unresolved-external-symbol-sprintf-and-sscanf-in-visual-studio-2015
dk43658 2015-10-13
  • 打赏
  • 举报
回复
项目属性——>配置属性——>C/C++——>代码生成——>运行库 ,这个方面是没有动过的,是直接升级转换成vs2015版了。经检查与以前完全一样。

在导入lib前自己写个_sscanf全局函数仍然不行,完全一样的提示。估计其实就是映射的sscanf,或者说自己写的函数无法包含进lib?那VS提供的就行?

如果再写个sscanf函数,会提示函数主体已存在,说明是重复定义。

重新安装vs2013,用vs2015编译,但选择2013的平台集,可以编译通过,但毕竟不是长久之计。

看看还有没有办法?

信阳毛尖 2015-10-11
  • 打赏
  • 举报
回复
项目属性——>配置属性——>C/C++——>代码生成——>运行库 你设置的运行库是啥?尝试这改改试一试
worldy 2015-10-11
  • 打赏
  • 举报
回复
真不行的话,自己按照原型写一个 _sscanf在某个cpp文件中写一个实现
oyljerry 2015-10-10
  • 打赏
  • 举报
回复
估计系统函数发生了变化,你需要用lib的源码了,而不是lib库直接用。修改lib源码,用2015修改api,编译生成新的lib
Pokeeeer 2015-10-10
  • 打赏
  • 举报
回复
只能去拿lib的源代码了,然后在vs2015下重新编译lib
dk43658 2015-10-10
  • 打赏
  • 举报
回复
有lib的源码我就不用来提问了。
我没有直接做过lib,所以希望有这方面经验的朋友提供帮助,我尽量写清楚点。

仔细核对了一下,如果去掉#pragma comment(lib, "xxx.lib")这一句,会发现很多函数无法解析,此时提示的函数名都被前加一个_。因此提示不能通过的_sscanf实际可能就是sscanf,这大概也是VS2013中能通过的原因。但Vs2015中也确认是有sscanr函数的,为何就不能通过?

反编译这个lib,发现其中确实有_sscanf字样,但也有_sprinf等都被前加_的函数,却能通过(估计同样对应的是sprinf函数)。唯独这个_sscanf不行。这是为什么呢?

退一步,在lib中,_sscanf只出现在一个函数中,而这个函数我也确认用不上,那有没有方法能忽略这个函数,以让VS能编译通过?
请高手帮忙啊!!
信阳毛尖 2015-10-10
  • 打赏
  • 举报
回复
用vs15重新编译lib库吧,如果有源码的话
dk43658 2015-10-09
  • 打赏
  • 举报
回复
不知道呢,这个项目没有改动过,现在Vs2013与vs2015是同时安装在电脑上的,VS2013可以编译通过而VS2015不行。 但在vs2013整个文件夹,搜索不到含有_sscanf这个函数的文件。 只在 Microsoft Visual Studio 12.0\VC\crt\src\sscanf.c 、stdio.h、tchar.h 中有近似的sscanf _sscanf_l 与_sscanf_s_l函数。在 VS2013的智能提示中也是只有这相近的函数,没有直接的_sscanf函数,不明白为什么2013可以通过。
lx624909677 2015-10-09
  • 打赏
  • 举报
回复
_sscanf 在早期版本是在哪个库里的?

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧