mono誕生的初衷是為了吸引更多的windows .net程式設計師來加入linux平台的開發。但在linux世界中c語言依然是主流。很多時候一些關鍵應用(比如大型笛卡兒乘積運算、需要呼叫平台硬體功能的時候)不得不依賴c來完成。
這個時候 mono 多少顯得有些力不從心。
當然可以使用dllimport特性來完成對本地庫(.so)的呼叫。現在來講講如何生成自己的本地庫,並在mono中呼叫首先,先用 c 寫乙個簡單的函式,這個函式只用來把2個整形的形參相加之後返回結果。
//the file name is sum.c
#include
int sum(int a, int b)
ok.現在我們準備生成乙個名為 libsum.so 的目標本地庫。使用 gcc 編譯器來編譯生成我們要的結果
gcc -wall -fpic -o2 -c -o libsum.o sum.c //生成.o
gcc -shared -wl,-soname,libsum.so -o libsum.so libsum.o //這步才生成共享庫 .so 檔案
這個時候已經生成 libsum.so。然後可以在 mono 中使用它了。
using system;
using system.runtime.interopservices;
public class unsafedemo
", x);}}
之後可以編譯我們的程式:
$ mcs --unsafe unsafedemo.cs
$ mono unsafedemo.exe
如果在編譯程式的時候提示沒找到 libsum.so ,你可以把 libsum.so 放到與 unsafedemo.exe 同級的目錄下面試試。
最後提醒一點寫 c 的時候記住一點。c 是用返回值來判斷是否發生錯誤。而 mono 是用異常。
//c code segment
int debug (char *s)
//mono code segment
[dllimport ("libsum.so", entrypoint="debug")]
static extern int debug(string sb);
unsafe static void main()
else
}
c 生成so呼叫LOGI
前一陣為android程式寫了一些c 生成的so檔案,但是單檔案沒法單步除錯,導致呼叫時出現問題後不好定位 於是想到在c 程式的關鍵點打logi標記,剛開始遇到些問題,後來終於解決了,現在把解決方法記錄下來,方便自己,也方便別人。首先,在c 或c的開始定義巨集,如下 定義info資訊 define ...
c編譯生成so 庫
首先 gcc c fpic libst.c 生成 libst.o 然後gcc shared fpic o libst.so libst.o 生成 libst.so 動態鏈結庫 注意 fpic選項。pic指position independent code。共享庫要求有此選項,以便實現動態連線 dyn...
C語言生成DLL供C 呼叫
編寫c程式如下 include stdio.h declspec dllexport void myfun 儲存,取名為my.c 執行 vs 命令提示,cl c 路徑 my.c 執行以後會生成 my.obj,預設在vs安裝資料夾的vc目錄下 再執行 link dll 路徑 my.obj 在同乙個目錄...