【问题标题】:Cannot link with system32.dll using visual studio command prompt无法使用 Visual Studio 命令提示符与 system32.dll 链接
【发布时间】:2012-11-07 01:10:29
【问题描述】:

在 Visual Studio 命令提示符下使用 link.exe:

link.exe "C:\Users\Jon\Desktop\euler\asm\test" kernel32.dll

提供有用的信息:LINK : fatal error LNK1181: cannot open input file 'kernel32.dll' 为什么不能链接到系统dll?

我转到 GoLink:

"C:\Program Files (x86)\nasm\golink.exe" /console test.obj Kernel32.dll

哪些链接很好,但我一运行它就崩溃了。 我正在使用 NASM "C:\Program Files (x86)\nasm\nasm.exe" -fwin64 "test.asm"

这是我的汇编程序Pastebin

【问题讨论】:

    标签: winapi assembly linker nasm x86-64


    【解决方案1】:

    MSVC 的链接不能直接链接到 DLL - 您需要改用 kernel32.lib 导入库:

    link.exe "C:\Users\Jon\Desktop\euler\asm\test.obj" kernel32.lib
    

    您需要确保环境设置正确,以便link.exe 可以找到导入库。这通常由配置用于运行工具的命令行窗口的vcvarsall.bat(或类似的)脚本/批处理文件来完成。如果您没有为构建工具配置环境的东西,则需要通过使用完整路径或通过带有 /libpath 链接器选项的目录来传递库的位置。

    我不知道 GoLink 是什么,所以我无法评论它的正确或错误...

    【讨论】:

    • 好的,它正在合并。 GoLink应该直接从 DLL 导入符号,不需要静态库。
    • 很抱歉再次发表评论。所以我必须使用 largeaddressaware:no switch...大概是因为它是 x64 位代码....虽然我的指令不是 RIP-Relative,但代码应该知道大于 2GB 的地址...你能解释一下吗这个?
    猜你喜欢
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 2010-11-03
    • 2018-06-18
    • 1970-01-01
    相关资源
    最近更新 更多