2009-06-04 14 views
2

Eclipse를 사용하여 C++로 프로그램을 작성하고 있습니다. Windows 용 DLL과 같이 Linux 용 라이브러리로 컴파일하려고합니다. 내가 어떻게 할 수 있니? 라이브러리를 만드는 방법에 대한 자습서를 알고 있습니까?Eclipse를 사용하여 동적으로로드 된 Linux 라이브러리 만들기

저는 리눅스 용 아날로그의 유사성과 그것을 만드는 방법을 이해하고 싶습니다. 나는 작은 모범에 대해 감사 할 것이다.

답변

9

Linux에서 DLL의 해당 항목은 (일종의) 공유 객체 (.so)입니다.

당신은 같은 것을 할 필요가 :

$ g++ -c -fPIC libfile1.cpp 
$ g++ -c -fPIC libfile2.cpp 
$ g++ -shared -o libyourlib.so libfile1.o libfile2.o 

일부 오픈 소스 C++ 자세한 내용은 라이브러리 프로젝트를 살펴 보자. GTKMM이 그 중 하나입니다. 고도의 하나를 만들 것이다 ({여기을 좋아하는 선택 } CDT 또는 KDevelop이나와 같은 Eclipse)을 메이크업 파일 또는 IDE를 사용하도록 권장하는 대신 수동으로 모든 것을 컴파일하는 과정의

, 너 뒤에서 너.

+0

"g ++ -c ..."호출에 -fpic 또는 -fPIC 옵션을 추가해야합니다. 이는 "위치 독립적 코드"를 생성하여 Linux가 여러 프로세스간에 동일한 코드를 메모리에 공유 할 수있게합니다. – mmmmmmmm

+0

고마워요! 그것을 잊어 버렸습니다. –

6

UNIX/Linux 세계 DLL은 shared libraries이고 일반적으로 .so 또는 .o 확장자입니다.

공유 라이브러리의 HOWTO을 참조하십시오.

+0

.a는 공유되지 않지만 정적 라이브러리 – jpalecek

+0

은 ".a"가 아닌 ".o"를 의미합니다 (수정 됨). AIX는 ".o"를 사용합니다. – qrdl

+0

o 파일은 공유 라이브러리가 아닙니다. 오브젝트 파일입니다. –

0

기호의 기본 표시 여부를 변경할 수 있습니다. 성능을 향상시킬 수 있습니다. 주제에 관한 GCC wiki 항목을 확인하십시오.

UNIX 시스템에서 동적 공유 객체를 구현하는 적절한 방법을 설명하는 2006 년 Ulrich Drepper가 작성한 paper도 있습니다.

관련 문제