用ffi呼叫 dylib庫

2021-06-28 16:54:51 字數 964 閱讀 4278

有乙個特性需要呼叫第三方庫libsync,在node.js裡可以用ffi來實現

首先稍微包裝了一下,ffi也是支援非同步呼叫的,但是api比較麻煩,包裝以後呼叫起來會比較容易

var ffi = require("ffi");

var lib = ffi.library('./libsync', );

exports.file_chunk = file_chunk;

exports.file_delta = file_delta;

exports.file_sync = file_sync;

// callback(err, result)

function file_chunk(src, chunk, algo, callback)

function file_delta(src, chunk, delta, algo, callback)

function file_sync(src, delta, callback)

/**

* the extension to use on libraries.

* i.e. libm -> libm.so on linux

*/var ext = library.ext = [process.platform]

所以接下來就是需要把源**.c,.h編譯成.so和.dylib庫(開發需要.dylib,生產環境需要.so)

mac下編譯dylib檔案的命令也很簡單:

gcc -dynamiclib -o c.dylib a.c b.c

實際呼叫的**:

libsync.file_chunk(localpath, chunkpath, 0, function (err, flag) );

iOS中建立,使用動態庫 dylib

測試環境 xcode4.5.2 mac os x 10.8.2 重要 由於蘋果不支援自己建立動態庫,所以這裡需要替換兩個檔案 1 ios device 需要替換的檔案 2 ios 模擬器 需要替換的檔案 具體可參照 或者 替換完成後重啟xcode 建立動態庫 1 開啟xcode,新建專案,選擇os ...

ffi動態鏈結庫的使用

最進專案中使用到了socketproc通訊,但是這樣有一點不是很好,必須單獨啟動乙個程序來執行 中的shell命令,後面想在nginx lua的環境下使用openresty中的lua resty shell,但是在後續閱讀原始碼說明的時候發現依賴關係過於複雜,會導致引入的openresty模組越來越...

(原)lua使用ffi呼叫c程式的函式

參考 1.新建calcmath.cpp,輸入 1 include 2 include 3 include 4 using namespace std 56 7extern c 1213float isquare float val 1417 18double isqrt double val 192...