【发布时间】:2021-09-17 06:54:25
【问题描述】:
我正在为 Windows 应用程序从 x86 升级到 x64 的代码库。
部分代码利用了 MSVC 内联汇编块。我不想通过和解释程序集,但我希望保留应用程序这一部分的功能。
我可以使用 GCC 使用内联程序集编译函数以生成 DLL 并将其链接到库的其余部分吗?
编辑 1:(7/7/21) 项目使用的编译器的灵活性是开放的,我目前正在考虑使用 Clang 与 MSVC 一起使用。(也可以使用英特尔 C++ 编译器)如在第一句话是我想在 Windows 上保留的 Windows 应用程序,使用另一个编译器的目的是由于我 1.) 不想重写大量程序集和 2.) 因为我知道 MSVC 不支持 x64内联汇编。到目前为止,clang 似乎正在处理一些关于它如何在程序集块内声明 cmets 和一些命令的问题。该功能是围绕对数据块进行数学运算而构建的,在开发时应该尽可能快,但现在它按预期工作,我不想升级只是维护功能。因此,任何支持内联汇编的编译器都是一种选择。
编辑 2:(21 年 7 月 7 日)我忘了在第一次编辑中提到,我不一定希望将 32 位 DLL 加载到另一个进程中,因为我担心将数据复制到共享内存。我为另一个项目做了类似的解决方案,但数据集大约 8 MB,我担心函数的慢复制时间会导致数学上的时间限制导致应用程序运行时出现问题。(慢,滞后和缓冲是我试图避免的影响。)我不想让它更快,但它绝对不能变得更慢。
【问题讨论】:
-
你的目标平台是什么?
-
汇编语言 sn-ps(用于 x86-32)不太可能在 x86-64 下工作。
-
我不确定您使用的编译器有多大的灵活性(如果有的话),但如果您可以访问
clang-cl,就以下方面而言,这可能比gcc更好MSVC 可操作性——因为这是插入到 MSVC 的标准库和代码生成器中的clang前端,这几乎可以保证兼容性。 -
MSVC x64 没有内联汇编块。
-
答案是“视情况而定”,请提供minimal reproducible example
标签: c++ visual-studio assembly gcc dll