有关vs2008在x64下编译.asm汇编文件

guhzh 2015-08-26 10:57:52
环境:vs2008
平台:win7 X64
内容:利用vs2008自身集成的masm编译器,将asm文件编译成obj文件

描述:由于汇编文件只能在x86模式下才能嵌入进C++工程中,而x64下只能采取将asm文件编译成obj文件,然后在链接到工程中,也就是C++调用独立汇编asm文件中的函数。

问题:为了直接在vs2008下编译asm文件,我右键点击工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”,但是我发现asm编译器还是ml.exe而非ml64.exe,请各位大神指点!!
...全文
944 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
guhzh 2015-08-28
  • 打赏
  • 举报
回复
引用 10 楼 adlay 的回复:
[quote=引用 7 楼 guhzh 的回复:] [quote=引用 5 楼 adlay 的回复:] [quote=引用 3 楼 guhzh 的回复:] [quote=引用 2 楼 adlay 的回复:] 自己新建一个生成规则呗
我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。[/quote] 新建一个,不是修改原有的[/quote] 就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。[/quote] 我不知道你具体怎么操作的,我用新建的规则测试是可以的: [/quote] 看到你的提示有感,我试着去再创建一个新的规则才发现,原来编译器所依赖的masm.rules文件是通过配置自动生成的!问题已解决,很感谢 adlay 的耐心解答!
guhzh 2015-08-28
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
右键点击Debug | Win64或Release | Win64工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler” 而不是 右键点击Debug | Win32或Release | Win32工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler” 我猜。
我是在x64模式下工程选择的“Custom Build Rule”,只是vs2008本身不自带编译64位汇编的规则,需要自己去配置,不知道别人是什么情况,不过我安装的vs2008是这样的情况。
赵4老师 2015-08-28
  • 打赏
  • 举报
回复
注意楼上截图中“窗口(W)”下面的“x64”
www_adintr_com 2015-08-27
  • 打赏
  • 举报
回复
引用 3 楼 guhzh 的回复:
[quote=引用 2 楼 adlay 的回复:] 自己新建一个生成规则呗
我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。[/quote] 新建一个,不是修改原有的
赵4老师 2015-08-27
  • 打赏
  • 举报
回复
在MSDN里面搜MsBuild
guhzh 2015-08-27
  • 打赏
  • 举报
回复
引用 2 楼 adlay 的回复:
自己新建一个生成规则呗
我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。
www_adintr_com 2015-08-27
  • 打赏
  • 举报
回复
引用 7 楼 guhzh 的回复:
[quote=引用 5 楼 adlay 的回复:]
[quote=引用 3 楼 guhzh 的回复:]


[quote=引用 2 楼 adlay 的回复:]
自己新建一个生成规则呗


我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。[/quote]
新建一个,不是修改原有的[/quote]

就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。[/quote]

我不知道你具体怎么操作的,我用新建的规则测试是可以的:
赵4老师 2015-08-27
  • 打赏
  • 举报
回复
右键点击Debug | Win64或Release | Win64工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler” 而不是 右键点击Debug | Win32或Release | Win32工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler” 我猜。
赵4老师 2015-08-27
  • 打赏
  • 举报
回复
asm编译为obj link时添加该obj 网上搜一个asm64+CPP64的博客文章应该不难吧。我猜。
guhzh 2015-08-27
  • 打赏
  • 举报
回复
引用 5 楼 adlay 的回复:
[quote=引用 3 楼 guhzh 的回复:] [quote=引用 2 楼 adlay 的回复:] 自己新建一个生成规则呗
我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。[/quote] 新建一个,不是修改原有的[/quote] 就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。
guhzh 2015-08-27
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
在MSDN里面搜MsBuild
首先谢谢您的答复,不过设置编译前事件的话,对我这个菜鸟来说写那个批处理文件有点困难,所以不想采用这种方法。还是谢谢你!
guhzh 2015-08-26
  • 打赏
  • 举报
回复
自己先顶一下,另再补充一下问题:我在是vs2013下在做如上的动作时,asm编译器就会根据平台的选择而做相应的改变,如:选择win32,编译器就会改变为ml.exe;选择x64,编译器就会改为ml64.exe。在线等各位大神的解答,谢谢!!
www_adintr_com 2015-08-26
  • 打赏
  • 举报
回复
自己新建一个生成规则呗

24,853

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧