平台: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,请各位大神指点!!
13 个解决方案
#1
自己先顶一下,另再补充一下问题:我在是vs2013下在做如上的动作时,asm编译器就会根据平台的选择而做相应的改变,如:选择win32,编译器就会改变为ml.exe;选择x64,编译器就会改为ml64.exe。在线等各位大神的解答,谢谢!!
#2
自己新建一个生成规则呗
#3
我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。
#4
在MSDN里面搜MsBuild
#5
新建一个,不是修改原有的
#6
在MSDN里面搜MsBuild
首先谢谢您的答复,不过设置编译前事件的话,对我这个菜鸟来说写那个批处理文件有点困难,所以不想采用这种方法。还是谢谢你!
#7
自己新建一个生成规则呗
我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。
新建一个,不是修改原有的
就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。
#8
asm编译为obj
link时添加该obj
网上搜一个asm64+CPP64的博客文章应该不难吧。我猜。
link时添加该obj
网上搜一个asm64+CPP64的博客文章应该不难吧。我猜。
#9
右键点击Debug | Win64或Release | Win64工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”
而不是
右键点击Debug | Win32或Release | Win32工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”
我猜。
而不是
右键点击Debug | Win32或Release | Win32工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”
我猜。
#10
自己新建一个生成规则呗
我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。
新建一个,不是修改原有的
就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。
我不知道你具体怎么操作的,我用新建的规则测试是可以的:
#11
注意楼上截图中“窗口(W)”下面的“x64”
#12
右键点击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是这样的情况。
#13
自己新建一个生成规则呗
我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。
新建一个,不是修改原有的
就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。
我不知道你具体怎么操作的,我用新建的规则测试是可以的:
看到你的提示有感,我试着去再创建一个新的规则才发现,原来编译器所依赖的masm.rules文件是通过配置自动生成的!问题已解决,很感谢 adlay 的耐心解答!
#1
自己先顶一下,另再补充一下问题:我在是vs2013下在做如上的动作时,asm编译器就会根据平台的选择而做相应的改变,如:选择win32,编译器就会改变为ml.exe;选择x64,编译器就会改为ml64.exe。在线等各位大神的解答,谢谢!!
#2
自己新建一个生成规则呗
#3
自己新建一个生成规则呗
我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。
#4
在MSDN里面搜MsBuild
#5
自己新建一个生成规则呗
我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。
新建一个,不是修改原有的
#6
在MSDN里面搜MsBuild
首先谢谢您的答复,不过设置编译前事件的话,对我这个菜鸟来说写那个批处理文件有点困难,所以不想采用这种方法。还是谢谢你!
#7
自己新建一个生成规则呗
我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。
新建一个,不是修改原有的
就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。
#8
asm编译为obj
link时添加该obj
网上搜一个asm64+CPP64的博客文章应该不难吧。我猜。
link时添加该obj
网上搜一个asm64+CPP64的博客文章应该不难吧。我猜。
#9
右键点击Debug | Win64或Release | Win64工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”
而不是
右键点击Debug | Win32或Release | Win32工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”
我猜。
而不是
右键点击Debug | Win32或Release | Win32工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”
我猜。
#10
自己新建一个生成规则呗
我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。
新建一个,不是修改原有的
就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。
我不知道你具体怎么操作的,我用新建的规则测试是可以的:
#11
注意楼上截图中“窗口(W)”下面的“x64”
#12
右键点击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是这样的情况。
#13
自己新建一个生成规则呗
我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。
新建一个,不是修改原有的
就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。
我不知道你具体怎么操作的,我用新建的规则测试是可以的:
看到你的提示有感,我试着去再创建一个新的规则才发现,原来编译器所依赖的masm.rules文件是通过配置自动生成的!问题已解决,很感谢 adlay 的耐心解答!