linux c++动态库类导出

下面举例说明:

  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

  

猜你喜欢

转载自blog.csdn.net/u014269285/article/details/52677811