2012-10-13 2 views
0

어떤 이유로 glibc를 수동으로 연결해야합니다.명시 적 glibc 연결 후 "세그먼트 오류 (코어 덤프 됨)".

을 위해
#include <stdio.h> 
int _start(){ 
    printf("ABCDE"); 
    return 0; 
} 

나는 다음과 같은 명령을 입력하여 컴파일 :

gcc -c main.c -o main.o 
gcc -L/lib/x86_64-linux-gnu/ -nostdlib main.o -o main -lc 

불행하게도, ./main을 실행 한 후 나는 단지 분할 고장이 (코어 덤프) 얻을

나는 다음과 같은 프로그램을 실행하려고

누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까?

+0

rt-startup을 무시하려고합니까? 귀하의 ID가 [예약 됨] (http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier)이기 때문에 – WhozCraig

+0

'-lc'는 수동으로 링크해야합니다. 왜냐하면'-nostdlib'는 그것을 비활성화하기 때문입니다. – duskwuff

답변

2

_exit(0);이 트릭을 수행해야합니다.

그러나 달성하려는 것은 무엇입니까? Sample

+0

대단히 감사합니다! 오래된 glibc 버전의 오래된 커널에서 실행될 응용 프로그램을 작성해야합니다. 나는 연결이 제대로 작동하는지 알아 냈다. – nkdm

+0

@nkdm 여기에서 시도한 접근법은 프로그램이 약간 더 복잡 해지면 오래된 커널에서 작동하지 않을 것입니다. 아마도 이러한 대답을 읽어야합니다 : http://stackoverflow.com/a/2079757/50617 http://stackoverflow.com/a/8658468/50617 –

+0

GLIBC 2.15를 동적으로 연결하는 컴파일러가 있었지만 대상 시스템에는 GLIBC 2.4는 호환성이 없었습니다. 나는 '- 정적'옵션으로 연결하는 것이 많은 기억을 취할 것이라고 생각했지만 다행히도 받아 들일 만하다. – nkdm

관련 문제