windows nasm gcc给出错误“Createprocess:no such file or directory”。

时间:2012-10-15 00:52:43

标签: gcc assembly x86 mingw nasm

不幸的是,我现在不得不切换到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附带的所有其他编译器。

为什么会出现此错误?

提前致谢

1 个答案:

答案 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安装做任何特别的事情,我想我使用了所有默认设置参数。