다음은 공유 클래스 라이브러리 shared. [h, cpp] 및 라이브러리를 사용하는 main.cpp 모듈의 예를 보여줍니다. 매우 간단한 예이며 makefile을 훨씬 더 잘 만들 수 있습니다. 그러나 작동하고 도움이 될 수 있습니다.
shared.h는 클래스를 정의합니다.
class myclass {
int myx;
public:
myclass() { myx=0; }
void setx(int newx);
int getx();
};
shared.cpp는 getx / setx 함수를 정의합니다.
#include "shared.h"
void myclass::setx(int newx) { myx = newx; }
int myclass::getx() { return myx; }
main.cpp는 클래스를 사용합니다.
#include <iostream>
#include "shared.h"
using namespace std;
int main(int argc, char *argv[])
{
myclass m;
cout << m.getx() << endl;
m.setx(10);
cout << m.getx() << endl;
}
libshared.so를 생성하고 공유 라이브러리와 main을 연결하는 makefile :
main: libshared.so main.o
$(CXX) -o main main.o -L. -lshared
libshared.so: shared.cpp
$(CXX) -fPIC -c shared.cpp -o shared.o
$(CXX) -shared -Wl,-soname,libshared.so -o libshared.so shared.o
clean:
$rm *.o *.so
실제로 'main'을 실행하고 libshared.와 링크하려면로드 경로를 지정해야합니다 (또는 / usr / local / lib 또는 이와 유사한 경로에 배치).
다음은 현재 디렉토리를 라이브러리의 검색 경로로 지정하고 기본 (bash 구문)을 실행합니다.
export LD_LIBRARY_PATH=.
./main
프로그램이 libshared.so와 연결되어 있는지 확인하려면 ldd를 시도하십시오 :
LD_LIBRARY_PATH=. ldd main
내 기계에 인쇄 :
~/prj/test/shared$ LD_LIBRARY_PATH=. ldd main
linux-gate.so.1 => (0xb7f88000)
libshared.so => ./libshared.so (0xb7f85000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7e74000)
libm.so.6 => /lib/libm.so.6 (0xb7e4e000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0xb7e41000)
libc.so.6 => /lib/libc.so.6 (0xb7cfa000)
/lib/ld-linux.so.2 (0xb7f89000)