linux c++動態庫類匯出
阿新 • • 發佈:2019-01-03
下面舉例說明:
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