linux下將c 編譯成so,呼叫該so檔案

2021-07-26 19:30:22 字數 1576 閱讀 5310

在其他資料上增加了過程中遇到的問題。

so檔案為動態鏈結庫檔案,與windows下的dll檔案相當,linux下系統so檔案一般儲存在/usr/lib中。

下面就說明一下如何生成c++程式的so檔案,以及如何在c++程式中呼叫該so檔案

**********test.h**********=

#ifdef __cplusplus //

extern "c"

;int hellot(int j);

#ifdef __cplusplus

}#endif 

**********test.cpp**********=

#include"test.h"

#include

using namespace std;

int test::hello(int i)

編譯test.cpp檔案

g++ -shared -fpic -lm -ldl -o libtest.so test.cpp

其中,so檔名必須以lib開頭。編譯具體指令請參考幫助文件

編譯除錯test.cpp檔案

gcc -ggdb3 -wall -shared -fpic -o libtest.so test.cpp

**********main.cpp**********=

#include

#include

#include

#include

using namespace std;  

/*需要用到的函式

dlopen()

dlerror()

dlsym()

dlclose()

都儲存在標頭檔案dlfcn.h中

*/int main()    

in#include

#include

#include "filter.h"

int main()  ;

int *buf =(int*) malloc(20*4);

int **data = &buf;

int ecg_filter_v5[10]=,ecg_filter_v1[10]=;

int fs = 128;

printf("11111\n");

//        int **datatemp = (int**)data;

int result = 0;

printf("start filter\n");

result = filter(data, lengthdata, ecg_filter_v5, ecg_filter_v1, fs);

if (result != 1)

else

return 0;

}編譯main.cpp檔案

g++ main.cpp -ldl -o main

編譯除錯main.cpp檔案

gcc -ggdb3 -wall  -o test main.c -llib  -lfilter

執行./main

除錯 main

gdb -q test 

單步執行 s

run

只使用NDK將C C 編譯成SO

在自帶的ndk裡面有個ndk helper目錄,除了android.mk檔案,還有一些示例。我這裡只取三個檔案作修改後即可用。在ndk bundle下新建乙個名為jni的目錄,將上面的這些檔案都複製乙份到裡面。這是因為從ndk r4開始,只需將檔案放在jni下即可執行。為了能編譯通過,先將複製過來的...

Python 將py檔案編譯成so檔案

1.安裝cython,以及gcc編譯環境 root localhost pip install cython 2.編寫測試指令碼 test.py def test print hello python def add a,b print a b return a b 1.編寫setup.py檔案,與...

c 下將 cs檔案編譯成dll

呼叫方法 開始 所有程式 microsoft visual studio 2005 visual studio tools visual studio 2005 命令提示 開啟後,輸入csc 檢視編譯選項 注意 要將命名空間也寫進csc裡qnrujym啊 out 輸出檔名 預設值 包含主類的檔案或第...