gcc 명령 줄을 사용하여 .c 파일에서 .so 파일 작성


162

Linux 동적 라이브러리 (.so 파일)를위한 hello world 프로젝트를 만들려고합니다. 그래서 hello.c 파일이 있습니다 :

#include <stdio.h>
void hello()
{
    printf("Hello world!\n");
}

hello()명령 줄에서 gcc를 사용하여 내보내는 .so 파일을 어떻게 만듭니 까?

답변:


293

공유 라이브러리를 생성하려면 먼저 -fPIC(위치 독립적 코드) 플래그 를 사용하여 C 코드를 컴파일해야합니다 .

gcc -c -fPIC hello.c -o hello.o

그러면 객체 파일 (.o)이 생성됩니다. 이제 가져 와서 .so 파일을 만듭니다.

gcc hello.o -shared -o libhello.so

편집 : 의견에서 제안 :

당신이 사용할 수있는

gcc -shared -o libhello.so -fPIC hello.c

한 번에 할 수 있습니다. – Jonathan Leffler

또한 -Wall모든 경고 -g를 받고 gcc명령에 디버깅 정보를 얻기 위해 추가 하는 것이 좋습니다 . – 바 실레 스타 인케 치


1
gcc -c -fPIC blabla.c -o blabla.o를 먼저 수행 한 다음 위의 명령을 수행해야합니다.
dreamcrash 2013

57
또는 한 번 gcc -shared -o libhello.so -fPIC hello.c에 수행 할 수도 있습니다.
Jonathan Leffler

5
또한 -Wall모든 경고 -g를 받고 gcc명령에 디버깅 정보를 얻기 위해 추가 하는 것이 좋습니다 .
Basile Starynkevitch

추천 해 주셔서 감사합니다. 답변에 추가했습니다
dreamcrash 2013

3
@sashoalm .o파일은 기본적으로 소스 파일의 객체 파일로, 최종 실행 파일에 연결하기 전에 소스 파일에 대한 객체 파일입니다. 따라서 실행 gcc -o abc.c abc.o하면 객체 파일이 생성됩니다. 그런 다음이 abc.o파일을 사용하여 파일을 만들 수 .so있습니다. 너무 많은 파일을 만들려면 파일에 작성된 올바른 c 코드 만 .c있으면됩니다. 추신 : 의견에서 의심을 없애기 위해.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.