2013-04-14 1 views
11

안녕하세요. 현재 필자가 작성한 컴파일러에 대해 x86 어셈블리를 생성하고 있으며 64 비트 VM (어셈블리 코드는 32 비트)에 파일을 연결하는 데 문제가 있습니다. GNU 링커가 32 비트 ELF 실행 파일을 생성하도록합니다.

나는이 명령으로 오브젝트 파일의 벌금을 조립 할 수 있었다 :

as --32 mult.S -o mult.o 

하지만 난 그게 32 비트 ELF 파일을 생성 할 ld에 대한 모든 옵션을 찾을 수 없습니다 :

ld <some-option?> mult.o -o mult 

도움이 될 것입니다.

답변

19

ld -m elf_i386 mult.o -o mult 

ld <some-option?> mult.o -o mult

당신은 사용할 수 아키텍처의 목록을 얻을 수 있습니다 :

ld -V 

샘플 출력 : 그러나

GNU ld (GNU Binutils for Ubuntu) 2.24 
    Supported emulations: 
    elf_x86_64 
    elf32_x86_64 
    elf_i386 
    i386linux 
    elf_l1om 
    elf_k1om 
    i386pep 
    i386pe 

, 그 안 필요 : ld l 그 객체의 형식에 따라 자동으로 에뮬레이션을 선택해야합니다.

+1

고마워요, 저는 사실 몇 분 전에 이것을 발견했습니다. 나는 그것이'ld'이 할 것이라고 기대 했었습니다. 그러나 어떤 이유로 그것이 여전히 불일치 아키텍처라고 말했습니다. –

+0

'elf32_x86_64'와'i386linux','elf_l1om'과 같은 어려운 것들을 설명 할 수 있습니까? –

+0

나는 elf_i386이하는 일을 물어볼 수 있습니까? 매뉴얼을 검색했지만 찾을 수 없습니다. – paradox

관련 문제