下面举例说明:
1.exportClass.h
#ifndef __EXPORT_CLASS_H #define __EXPORT_CLASS_H class ExportClass { public: void printf(); }; extern "C" ExportClass * createObject(); #endif
2.生成动态库
g++ -rdynamic -m32 -c exportClass.cpp g++ -rdynamic -m32 -shared -o libexportClass.so exportClass.o
-rdynamic 却是一个 连接选项 ,它将指示连接器把所有符号(而不仅仅只是程序已使用到的外部符号)都添加到动态符号表(即.dynsym表)里,以便那些通过 dlopen() 或 backtrace() (这一系列函数使用.dynsym表内符号)这样的函数使用。
-m32 32位版本
3.test.cpp
#include "exportClass.h" #include <dlfcn.h> typedef ExportClass * (*CREATEOBJECT)(); CREATEOBJECT create_object; typedef void* lib_handle; lib_handle handle = dlopen("libexportClass.so", RTLD_LAZY); create_object = (CREATEOBJECT) dlsym(handle, "createObject"); ExportClass* exportclass = create_object (); exportclass ->print();
4.编译
g++ -rdynamic -m32 -o test test.cpp -ldl -L. -lexportClass 注:-ldl -l指定要链接的库,dl是有关dlopen等共享库
5.运行
export LD_LIBRARY_PATH=/libexportClass.so所在的路径:$LD_LIBRARY_PATH
./test