AndyAO
V2EX  ›  问与答

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

  •  
  •   AndyAO · Nov 19, 2020 · 1205 views
    This topic created in 2026 days ago, the information mentioned may be changed or developed.

    例如

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

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

    为什么会这样?

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

    Supplement 1  ·  Nov 19, 2020
    问题已经解决,感谢 codehz 和 si 提供的信息.
    3 replies    2020-11-19 09:57:38 +08:00
    Mithril
        1
    Mithril  
       Nov 19, 2020
    一般来说是因为你 DLL 里面导出函数的声明有问题,或者忘了加 lib 文件。
    不过你这个是因为 printf 系列函数全部改成 inline 的了,你得在你的代码里引用 crt 的 header,或者添加上那个 legacy stdio 的 lib
    codehz
        2
    codehz  
       Nov 19, 2020 via Android   ❤️ 1
    是调用约定的问题,具体内容自己搜索
    si
        3
    si  
       Nov 19, 2020   ❤️ 1
    搜索:函数名修饰,VC 的编译器会在 C 的函数名前面加个下划线,stdcall 的还在后面加上 @参数字节数。C++的还后面加上参数类型,用不同的字母代表不同的类型。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   815 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 21:33 · PVG 05:33 · LAX 14:33 · JFK 17:33
    ♥ Do have faith in what you're doing.