期望在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...