1. 程式人生 > >linux c++動態庫類匯出

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