天天看點

c++調用c++的so動态庫

1.環境 

ubuntu 14.04 

g++ 4.8.4

2.沒有類的情況

1)庫檔案

a)源碼

//cppl1.cpp
extern "C" int add(int a, int b) {
	return a + b;
}
           

b) 生成庫檔案

cd到cppl1.cpp所在目錄,輸入指令

g++ -shared -o libcppl1.so cppl1.cpp
           

會在目前目錄生成檔案libcppl1.so

2)主程式

a)源碼

//cppcppl1.cpp
#include <stdio.h>
#include <dlfcn.h>
using namespace std;
int main() {
	typedef int(*t_add)(int a, int b);
	void *handle;
	handle = dlopen("./libcppl1.so", RTLD_LAZY);
	t_add myadd = (t_add)dlsym(handle, "add");

	int result = myadd(1, 2);

	dlclose(handle);

	printf("%d\n", result);
}
           

b)編譯成可執行檔案

cd到cppcppl1.cpp所在目錄,輸入指令

g++ cppcppl1.cpp -o cppcppl1 -ldl
           

生成可執行檔案cppcppl1

4).執行

cd到可執行檔案cppcppl1所在目錄

輸入指令

./cppcppl1