link.exe,选择64位或32位版本的Kernel32.lib

学徒第二

我正在尝试在64位Windows中编译和链接32位程序。我用nasm编译了程序

nasm -f win32 test.asm 

它已成功编译。但是当我尝试与link.exe链接时

link /entry:start /subsystem:console test.obj Kernel32.lib 

或者

link /machine:x86 /entry:start /subsystem:console test.obj Kernel32.lib

它给了我这个错误:

C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64\Kernel32.lib : warnin
g LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
test.exe : fatal error LNK1120: 3 unresolved externals

但是,当我编写Kernel32.lib的32位版本的绝对路径时,它可以成功链接。我认为我应该将32位Kernel32.lib的位置作为路径变量添加到某个地方,或者我应该使用开关,但是我找不到它。

有没有链接而不写绝对路径的方法?

科迪·格雷

您应该从已经使用正确的环境变量正确设置的命令提示符下运行链接器(和其他SDK工具)。这样您就不会有这个问题了。

最简单的方法是运行提供的批处理文件。vcvarsall.bat是主版本,请使用一个参数指定您要使用的构建环境的类型。使用x8632amd64位工具链进行32位,64位构建,或者x86_amd64使用32位工具链(32位交叉编译器上的64位)进行64位构建。另外,您也可以使用单独的批处理文件vcvars32.batvcvars64.batvcbarsx86_amd64.bat

您可以自己浏览这些文件,并查看它们设置了哪些环境变量,但是老实说,不值得花时间对它们进行反向工程。相关部分是将环境变量设置%WindowsSdkDir%为Windows SDK安装的根目录,然后使用该变量进行设置:

  1. PATH包括相应的bin子目录,其中包含工具,包括link.exe。对于x86和x86_amd64,这仅仅是bin对于amd64,它是bin\x64子目录。

  2. INCLUDEinclude包含头文件的适当子目录(对于所有构建类型都是相同的)。

  3. LIBlib包含链接器动态存根的适当子目录。对于x86,这仅仅是lib对于amd64和x86_amd64,它是lib\x64子目录。

您显然缺少的一个是最后一个。链接器没有在正确的目录中查找LIB文件。它不会根据machine切换自动执行此操作。它不知道如何配置构建系统或在何处安装SDK文件。使用批处理文件以最小的麻烦正确设置所有文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在iOS lib armv7和64位版本中需要帮助

来自分类Dev

Ubuntu 32或64位版本?

来自分类Dev

如何从64位版本制作32位程序?

来自分类Dev

如何在32位或64位版本的软件包之间进行选择?

来自分类Dev

我应该下载Ubuntu的32位版本还是64位版本?

来自分类Dev

为什么Windows的64位版本比32位版本大?

来自分类Dev

将Ubuntu从32位版本升级到64位版本

来自分类Dev

在64位Linux上编译32位Qt-致命错误:gnu / lib-names-32.h

来自分类Dev

Zoom for Ubuntu的32位版本?

来自分类Dev

Flywaydb 32位版本

来自分类Dev

无法在Ubuntu 16.04 64位上安装TeamViewer 12-依赖lib32asound2

来自分类Dev

Windows 8.1 32位版本升级到Windows 10 64位版本

来自分类Dev

64位可执行文件的运行速度低于32位版本

来自分类Dev

通过一项设置运行Eclipse 64位和32位版本

来自分类Dev

从64位主机将Chroot转换为32位版本的Ubuntu

来自分类Dev

强制安装32位Deb失败后,如何安装64位版本?

来自分类Dev

我可以从32位版本的Excel VBA调用64位DLL吗?

来自分类Dev

如何从64位创建32位版本的Python代码

来自分类Dev

在64位Ubuntu上安装32位版本的Oracle JDK 7?

来自分类Dev

从64位主机将Chroot转换为32位版本的Ubuntu

来自分类Dev

强制安装32位Deb失败后,如何安装64位版本?

来自分类Dev

如何安装相同-dev软件包的32位和64位版本?

来自分类Dev

我可以在32位计算机上安装64位版本的Ubuntu吗?

来自分类Dev

如何安装64位操作系统而不是旧的32位版本?

来自分类Dev

Windows Media Player的32位和64位版本有什么区别?

来自分类Dev

Windows 7 DVD可以用于安装32位和64位版本吗?

来自分类Dev

如何在64位Linux上找到32位版本的Java的路径?

来自分类Dev

安装32位和64位版本的libgoogle-perftools-dev

来自分类Dev

仅在 64 位 Debian Linux 10 上删除 /usr/lib32 和 /usr/libx32 是否安全

Related 相关文章

  1. 1

    在iOS lib armv7和64位版本中需要帮助

  2. 2

    Ubuntu 32或64位版本?

  3. 3

    如何从64位版本制作32位程序?

  4. 4

    如何在32位或64位版本的软件包之间进行选择?

  5. 5

    我应该下载Ubuntu的32位版本还是64位版本?

  6. 6

    为什么Windows的64位版本比32位版本大?

  7. 7

    将Ubuntu从32位版本升级到64位版本

  8. 8

    在64位Linux上编译32位Qt-致命错误:gnu / lib-names-32.h

  9. 9

    Zoom for Ubuntu的32位版本?

  10. 10

    Flywaydb 32位版本

  11. 11

    无法在Ubuntu 16.04 64位上安装TeamViewer 12-依赖lib32asound2

  12. 12

    Windows 8.1 32位版本升级到Windows 10 64位版本

  13. 13

    64位可执行文件的运行速度低于32位版本

  14. 14

    通过一项设置运行Eclipse 64位和32位版本

  15. 15

    从64位主机将Chroot转换为32位版本的Ubuntu

  16. 16

    强制安装32位Deb失败后,如何安装64位版本?

  17. 17

    我可以从32位版本的Excel VBA调用64位DLL吗?

  18. 18

    如何从64位创建32位版本的Python代码

  19. 19

    在64位Ubuntu上安装32位版本的Oracle JDK 7?

  20. 20

    从64位主机将Chroot转换为32位版本的Ubuntu

  21. 21

    强制安装32位Deb失败后,如何安装64位版本?

  22. 22

    如何安装相同-dev软件包的32位和64位版本?

  23. 23

    我可以在32位计算机上安装64位版本的Ubuntu吗?

  24. 24

    如何安装64位操作系统而不是旧的32位版本?

  25. 25

    Windows Media Player的32位和64位版本有什么区别?

  26. 26

    Windows 7 DVD可以用于安装32位和64位版本吗?

  27. 27

    如何在64位Linux上找到32位版本的Java的路径?

  28. 28

    安装32位和64位版本的libgoogle-perftools-dev

  29. 29

    仅在 64 位 Debian Linux 10 上删除 /usr/lib32 和 /usr/libx32 是否安全

热门标签

归档