不幸的是,我现在不得不切换到Windows来编写汇编代码,而不是使用Linux。但是当试图链接我的NASM生成的.obj文件时,它会出现错误`gcc:Createprocess:No such file or directory。“
我的代码:
GLOBAL _main
EXTERN _printf
_main:
push message
call _printf
add esp, 4
ret
message:
db 'Hello, world',10,0
我尝试将我的.obj文件移动到与GCC相同的目录中。我也尝试在与GCC相同的目录中编译整个东西。在使用我的批处理文件进行编译时,我没有使用任何环境变量,而是手动更改目录。我还将GCC安装在与G ++相同的目录中,以及MinGW附带的所有其他编译器。
为什么会出现此错误?
提前致谢
答案 0 :(得分:0)
这对我有用:
ASM文件:
; file: blahasm.asm
; assemble with nasm (v 2.10, Mar 12 2012): nasm -f elf32 blahasm.asm -o blahasm.o
bits 32
global _blah
_blah:
mov eax, 42
ret
C档案:
// file: blahc.c
// compile with MinGW x86 (gcc v 4.6.2): gcc -Wall -O2 blahc.c blahasm.o -o blah.exe
#include <stdio.h>
extern int blah(void);
int main(void)
{
printf("blah():%d\n", blah());
return 0;
}
输出:
blah():42
令我感到惊讶的是,唯一有效的格式是elf32
,并且它在gcc的Windows端口中得到支持,MinGW就是这样。
<强>更新强>:
我用NASM和MinGW创建了一个仅用于汇编的程序。
ASM文件:
; file: nsm.asm
; assemble with NASM (v 2.10, Mar 12 2012): nasm -f elf32 nsm.asm -o nsm.o
; compile (link) with MinGW x86 (gcc v 4.6.2): gcc -Wall -O2 nsm.o -o nsm.exe
bits 32
extern ___main
extern _printf
global _main
section .rdata
textstr:
db "Hello World!", 10, 0
section .text.startup
_main:
call ___main
push textstr
call _printf
add esp, 4
ret
输出:
Hello World!
我正在从“MinGW Shell”(MSYS)运行gcc,我不需要指定任何额外的命令行参数来使程序成功链接到标准库。我不需要对MinGW和MSYS安装做任何特别的事情,我想我使用了所有默认设置参数。