문제

나는 커널을 쓰기 위해 노력하고 있으며 프로젝트에서 나와 함께 일하는 몇 명의 친구가 있습니다. 우리는 DJGPP를 사용하여 프로젝트를 잠시 컴파일하고 있지만 프로젝트에서 주요 PartNet을 Windows XP에서 컴파일 할 수없는 이러한 방식으로 컴파일하는 데있어 크로스 플랫폼 호환성 문제가 있습니다. (DJGPP의 GCC는 Windows XP에서 127보다 긴 인수 목록에 문제가 있지만 Vista에서 동일한 인수 목록에 문제가 없습니다. 따라서 Vista는 XP보다 더 잘 작동합니다. OO).

누구든지, DJGPP와 함께 DARN을 컴파일하기 위해 더러운 해킹을 시도하기보다는 DJGPP를 완전히 버리고 Windows 용 GCC 버전에서 작업하기로 결정했습니다. 문제는 Mingw (내 지식으로)는 코드의 어셈블리 부분에 NASM 구문을 사용할 수 없으며이 시점에서 AT & T 구문으로 모든 것을 변환하는 데 약간의 고통이 될 것입니다. 물론, 프로젝트 초기에 상당히 초기 이래로 가능하지만 고통.

이제 문제를 알고 있습니다. 내 질문은 이것입니다 : Windows 용 GCC 컴파일러 배포판은이 프로젝트 자체를 가장 쉽게 포팅 할 수 있습니까? 이상적으로, 우리는 NASM 어셈블러 구문을 수행 할 수있는 것을 찾고 있으며 외부 DLL에 의존하지 않습니다 (여기서는 커널이며 액세스 할 수 없습니다). Windows의 여러 버전에서 일관되게 작동합니다. 이 작업을 수행하는 가장 좋은 방법과 Windows 용 GCC 버전에 대한 권장 사항은 무엇입니까?

프로젝트를 AT & T 구문으로 변환해야한다면 괜찮습니다. 우리는 실제로 NASM을 사용하여 어셈블리 비트를 조립하고 유효한 .O 파일을 생성하지만 Mingw는 어떤 이유로 링크 할 수 없습니다. 인라인 어셈블리 비트 (아마도 5 줄)는 GCC가 요구하는대로 이미 AT & T 구문이라고 생각합니다.

감사!

도움이 되었습니까?

해결책

아마도 잘못된 객체 유형을 -f 옵션으로 NASM에 전달하고있을 것입니다.

나는 당신이 -f coff를 지나치게들을 것입니다.

-f win32를 통과해야합니다.

다른 팁

크로스 컴파일러를 구축하십시오.

http://wiki.osdev.org/gcc_cross-compiler

이것이 Windows 호스트에서 개발을 위해 DJGPP에서 전환 할 때 내가 한 일입니다. Cygwin 방법은 MSY보다 약간 안정적이므로 권장합니다.

이 작업을 마치면 NASM을 구성하도록 구성하십시오 elf32 객체 파일, 당신은 가기에 좋습니다.

DOS 또는 Windows 용 NASM 컴파일을 사용하고 있습니까? 나는 보지 않았지만 차이가있을 수 있습니다. 또한, 당신의 nasm이 너무 늙었다면, mingw가 이해할 수있는 것을 생성하지 못할 수 있습니다.

빠른 Google 검색에서 발견되었습니다 Mingw에서 X264 컴파일에 대한 튜토리얼, 단계 중 하나는 Mingw에서 NASM을 컴파일하는 것입니다.

실패하면, 당신은 objcopy를 사용하여 다른 답변에 대한 의견에 제안 된대로 시도 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top