Linux生成動態鏈結庫 so檔案的踩坑

2021-10-05 11:25:10 字數 853 閱讀 6978

期望在linux環境下執行r語言呼叫c語言的專案,首先要將所有c檔案編譯成動態鏈結庫.so檔案:

(r)user$ r cmd shlib test1.c test2.c test3.c
遇到的問題:

1. make: *** no rule to make target 'test2.o', needed by 'test2.so'. stop.

解決方案:檔案不在當前目錄下,切換到存放這些檔案的目錄下即可

2. make: nothing to be done for 'all'.

這表示已經編譯過了,沒有任何改動

解決方案:將該目錄下對應的.o和.so檔案全部重新刪除,再重新執行r cmd shlib regrf.c regtree.c rfutils.c編譯

3. test2.o: file not recognized: file format not recognized collect2: error:1

可能的原因一:檔案格式不對,我這裡是因為我原來儲存了在windows下的test2.o檔案,linux編譯的時候,而現在在linux下,自然兩種格式不相同

解決方案:刪除原來windows下的test2.o檔案,重新編譯

可能的原因二:編譯時,如g++ -c test.cpp test.h -o test.o或 r cmd shlib test.h test1.c test2.c test3.c時,多加了.h標頭檔案,編譯器會自動去找當前目錄下的標頭檔案,不需要在編譯的時候加入--

解決方案:刪掉編譯**中含有的標頭檔案即可

so動態鏈結庫生成 呼叫

linux下檔案的型別是不依賴於其字尾名的,但一般來講 o,是目標檔案,相當於windows中的.obj檔案 so 為共享庫,是shared object,用於動態連線的,和dll差不多 a為靜態庫,是好多個.o合在一起,用於靜態連線 1 動態庫的編譯 下面通過乙個例子來介紹如何生成乙個動態庫。這裡...

linux生成動態鏈結庫

步驟 1 建立動態鏈結庫 建立caculate.c caculate.h兩個檔案 編譯生成libcac.so檔案 gcc shared fpic caculate.c o libcac.so 2 建立測試程式 建立 main.pc檔案 編譯生成可執行檔案 gcc main.c o main l lc...

Linux 動態鏈結庫 so 的使用

1.背景 庫 就是已經編寫好的,後續可以直接使用的 c 靜態庫 會合入到最終生成的程式,使得結果檔案比較大。優點是不再有任何依賴。c 動態庫 動態庫,乙個檔案可以多個 同時使用記憶體中只有乙份,節省記憶體,可以隨主 一起編譯。缺點是需要標頭檔案。說 庫就是除了main函式之外的其他 都可以組成庫。2...