2017-12-24 6 views
-1

Google을 통해 연구 중이며 http://www.cs.virginia.edu/~evans/cs216/guides/vsasm.html을 참조하고 있지만이 오류를 해결하는 방법에 대한 아이디어가 있으면 궁금합니다. 'clear();' extern "C"에 오류가 없습니다. 나는이 문제가 해결 될 수있을 정도로 구체적이기를 바란다. 모든 조언을 크게 주시면 감사하겠습니다.Visual Studio에서 찾지 못했던 오류에 대한 자세한 내용 2017

.cpp 파일입니다.

extern "C" { 
    void clear(); 
} 

int main() { 
    clear(); 
    return 1; 
} 

.asm 파일입니다.

.586    ;Target processor. Use instructions for Pentium class machines 
.MODEL FLAT, C ;Use the flat memory model. Use C calling conventions 
.STACK   ;Define a stack segment of 1KB (Not required for this example) 
.DATA    ;Create a near data segment. Local variables are declared after 
       ;this directive (Not required for this example) 
.CODE    ;Indicates the start of a code segment. 

clear PROC 
    xor eax, eax 
    xor ebx, ebx 
ret 
clear ENDP 
END 

Visual Studio에서 빌드 사용자 지정 파일에서 masm을 사용하도록 설정했습니다. 나는 또한 '아니오'로 설정된 빌드에서 제외했다.

사용자 지정 빌드 단계에서 명령 줄 속성은 다음과 같습니다

ml /Cx /coff clear.asm /link /SUBSYSTEM:console /out:go /entry:clear 

내가 솔루션/프로젝트를 빌드 할 때/각 파일이 개별적으로 성공하지만 난 왜 '투명()을 알아낼 수 없습니다; ' 다음에 ->는 발견되지 않은 오류를 나타내는 녹색의 구불 구불 한 점을 가지고 있습니다.

extern "C" { 
    void clear(); 
} 
+1

링커 오류입니까 아니면 인텔리 센스 만 혼란 스럽습니까? – Quentin

+1

정확한 오류를 인용하십시오. –

+0

@RichardCritten ''clear '에 대한 함수 정의를 찾을 수 없습니다.' –

답변

-1

asm 파일의 이름을 "clear"이 아닌 "_clear"로 변경하십시오.

+0

이것의 근거는 무엇입니까? – VTT

+0

그녀는'.MODEL FLAT, C'를 사용하고 있습니다. 'C'는 표시되는'PROC' 문에 대한 기본 규칙을 CDECL로 변경합니다. CDECL 협약에 따라 MASM은'_ '을 앞에 붙입니다. 내가 아는 한 그녀의 문제는 실제로 컴파일/링크 된 코드 (작동하지 않음)입니다. 문제는 VS가 외부 assemly 모듈에 정의 된대로 'clear'을 인식하지 못한다는 것입니다. 나는 VS가 (그 자체로)이 OP가하려고하는 것을 지원한다고 믿지 않는다. - 녹색의 구불 구불 한 선이 사라지는 것을 믿는다. –

관련 문제