2013-06-09 2 views
0

FASM으로 작성된 프로그램에서 GNU readline 라이브러리를 사용하려고합니다. 그런 다음readline 라이브러리를 오브젝트 파일에 연결하는 방법은 무엇입니까?

format elf64 

public _start 

extrn readline 

section ".text" executable 
_start: 
    push prompt 
    call readline 
    jmp _start 

section ".data" 
    prompt db ">> ", 0 

나는 컴파일하고 다음과 같이 링크 : 이것은 내 어셈블리 코드이다 그러나

$ fasm test.asm 
$ ld -lreadline test.o -o test 

을 내가 ./test 떠들썩한 파티를 실행하려고 할 때 나에게 다음과 같은 오류 메시지가 있습니다 :

bash: ./test: No such file or directory 

test 실행 파일이 디렉터리에 있습니다. 뭐가 문제 야? libreadline 라이브러리를 올바르게 연결하지 않았습니까?

답변

1

32 비트 용 코드를 컴파일하는 64 비트 시스템에서 한때 이런 일이 일어났습니다. 32 비트 바이너리를 실행 파일로 인식 할 수 있도록 추가로 32 비트 개발 도구와 라이브러리 (적절한 libc의 변형)를 설치해야합니다.

+0

저는 우분투 13.04를 사용하고 있습니다. 어떤 패키지를 설치해야합니까? –

+0

@AaditMShah 글쎄, 내 머리 꼭대기에서 잘 모르겠다. 지난 번 우분투를 오래 사용해 본 적이있다. –

+0

스트레이트 32 비트 코드에서이 코드를 보았습니다. 'ld'는 기본적으로'/lib/ld-linux.so.1'을 인터프리터/다이나믹 링커로 사용하려고했습니다 ... 존재하지 않습니다 (제 시스템에서). (당신은 파일의 바로 텍스트 덤프에서이를 볼 수있다) 해결책은'ld -I/lib/ld-linux.so.2 ...'('--dynamic-linker'는'-I ', 더 많은 타이핑을 원한다면). 귀하의 시스템에서 위치가 다를 수 있습니다,하지만 이것이 당신이 발생했습니다 생각합니다. 혼란스럽지 않니? '-l readline' (그리고 아마도'L path-to-libreadline'도)을 지정할 필요가 있습니다. –

관련 문제