以下は、共有クラスライブラリ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を生成し、メインを共有ライブラリにリンクする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.soとリンクするには、ロードパスを指定する必要があります(または/ 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)