2016-11-18 6 views
1

(test.asm) : 나는 NASM로 조립보다는 MinGW 32 "`에 정의되지 않은 참조 ExitProcess 4 '@"나는 작은 어셈블러 프로그램을 작성 학습 목적

global _main 

extern [email protected] 

section .text 

    _main: 

     mov  ebx,0 
     push ebx 
     call [email protected] 

(test.obj입니다) :

이제
nasm -f win32 test.asm 

내가 "휴대용 실행"에 연결하려고 (윈도우 10 (32) 비트) :

ld test.obj 

하지만 난 항상이 오류 메시지가 점점 오전 :

undefined reference to `[email protected]' 

지금까지 내가 내 프로그램은 "Kernel32.dll에서"연결되지 않는다는 뜻이 메시지를 이해한다. 그러나 "ld"은 "Kernel32.dll"과 자동으로 연결되므로 일부 플래그를 추가 할 필요가 없습니다. 내가이 플래그 추가 게다가 경우 : 나는 다음과 같은 오류 메시지가 무엇입니까

ld test.obj -lkernel32 

을 :

cannot find -lkernel32 

나는 어쩌면 누군가가 뭐가 잘못 됐는지 말해 줄 수 바보 같은 실수를했다 확신합니다.

편집 :

것은 내가 사용하고있는 경우 "GCC"대신 작품의 : 지금은 "GCC는"알고 왜 궁금 그래서

gcc main.obj -nostdlib -lkernel32 

"-lkernel32" 및 "ld"아닙니다.

+1

'gcc' 명령 줄에'-v' 옵션을 추가하면'ld'가 어떻게 호출되는지 알 수 있습니다. – Jester

+0

감사합니다. 그게 큰 힌트입니다. – Michael

+0

kernel32.lib은 어디에 있습니까? '-L '피연산자를 추가하려고 시도 했습니까? – fuz

답변

1

ld으로 이미 알아 냈으므로 적절한 라이브러리를 찾으려면 경로를 지정해야합니다.

> nasm -f win32 foo.asm && golink foo.obj kernel32.dll 

GoLink.Exe Version 1.0.2.3 - Copyright Jeremy Gordon 2002-2016 - [email protected] 
Output file: foo.exe 
Format: Win32 Size: 1,536 bytes 

그것은을 수행 할 수 있습니다 : 당신이 학습 과정에 대한 여러분의 인생을 더 쉽게 만들고 싶어

한 조언은하지만, 조각의이 유형을 연결하는 일을하는 것만 큼 쉽습니다 golink이라는 가벼운 링커가 존재 필요한 dll에 링크하는 것은 꽤 많은데, 항상 검색 경로를 엉망으로 만들 필요가 없습니다.