2013-01-08 6 views
2

:링커 스크립트에서 아카이브 파일을 추출 나는 다음과 같은 문제에 대처하기 위해 노력하고

내가에서 만든 라이브러리 libxyz.a가 있다고 가정 :

/* main.c */ 
int main(void) 
{ 
    int a; 
} 

컴파일과 함께 보관 :

gcc -c main.c -o abc.o && ar cr libxyz.a abc.o 

정확하게 예상되는 위치에 abc.o를 삽입하려면 어떻게해야합니까?

나는 그런 방법으로 그것을 처리하기 위해 노력했다 :

/* script.ld */ 
SEARCH_DIR(.) 
INPUT(-lxyz) 
SECTIONS 
{ 
    .text : { xyz:abc(.text) } 
    .data : { xyz:abc(.data) } 
    .bss : { xyz:abc(.bss) } 
} 

하지만 실행 한 후 :

ld -T script.ld 

를 내가 얻을 :

ld: cannot find xyz:abc 

내가 어떤 예를 찾을 수 없습니다 포럼에서 링커 파일의 아카이브 압축 풀기. 내가 찾은 유일한 것은 archive:file 구조에 대한 정보 만 포함하는 링커의 설명서입니다.

답변

3

오늘 같은 문제를 처리해야하기 때문에 다른 사람이이 질문에 부딪 힐 경우 일부 파일 확장자가 누락되었습니다. 좋은 것을 좋아하는 것 :

SECTIONS 
{ 
    .text : { libxyz.a:abc.o(.text) } 
    .data : { libxyz.a:abc.o(.data) } 
    .bss : { libxyz.a:abc.o(.bss) } 
} 

도 경로를 처리해야합니다 (실제로 라이브러리가/libxyz.a 인 경우).

0

아마도 내 컴퓨터에서 스크립트를 시도했기 때문에 ld에 문제가 있습니다. 오류없이 올바르게 실행 되었기 때문일 수 있습니다. 내 ld 버전은 GNU ld (우분투 용 GNU Binutils)입니다. 2.22

+0

좋아, LD 버전을 변경했습니다. 에러는 발생하지 않지만'objdump -t a.out'은 여전히'main' 심볼을 표시하지 않습니다 – nkdm