V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
AndyAO
V2EX  ›  问与答

为什么 MSVC 的 LNK2019 错误信息中,函数名前面都有多余的下划线?

  •  
  •   AndyAO · 2020-11-19 09:33:28 +08:00 · 805 次点击
    这是一个创建于 1454 天前的主题,其中的信息可能已经有所发展或是发生改变。

    例如

    error LNK2019: unresolved external symbol _snprintf referenced in function _elog_hexdump.

    表达的意思是在函数elog_hexdump中引用不存在的符号snprintf,而不是_snprintf.

    为什么会这样?

    在查看Linker Tools Error LNK2019 | Microsoft Docs,并且去谷歌搜索后也没有找到答案.

    第 1 条附言  ·  2020-11-19 10:21:26 +08:00
    问题已经解决,感谢 codehz 和 si 提供的信息.
    3 条回复    2020-11-19 09:57:38 +08:00
    Mithril
        1
    Mithril  
       2020-11-19 09:46:59 +08:00
    一般来说是因为你 DLL 里面导出函数的声明有问题,或者忘了加 lib 文件。
    不过你这个是因为 printf 系列函数全部改成 inline 的了,你得在你的代码里引用 crt 的 header,或者添加上那个 legacy stdio 的 lib
    codehz
        2
    codehz  
       2020-11-19 09:55:26 +08:00 via Android   ❤️ 1
    是调用约定的问题,具体内容自己搜索
    si
        3
    si  
       2020-11-19 09:57:38 +08:00   ❤️ 1
    搜索:函数名修饰,VC 的编译器会在 C 的函数名前面加个下划线,stdcall 的还在后面加上 @参数字节数。C++的还后面加上参数类型,用不同的字母代表不同的类型。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1092 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:30 · PVG 03:30 · LAX 11:30 · JFK 14:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.