下面显示了共享的共享类库的示例。[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 #include "shared.h"using namespace std;int main(int argc, char *argv[]){
myclass m;
cout <
m.setx(10);
cout <
以及生成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.so链接,您可能需要指定加载路径(或将其放在/ usr / local / lib或类似)。
以下指定当前目录作为库的搜索路径并运行main(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)