2017-09-26 93 views
1

我在我的應用程序中使用Lua 5.3作爲靜態庫。我有一個Lua模塊寫成C Dll,它也使用Lua 5.3作爲靜態庫。使用Lua作爲應用程序中的靜態庫和Lua加載模塊

在加載模塊我註冊一個函數,返回一個值的表。表包含字符串作爲鍵和整數作爲值。

我正在觀察幾次調用該函數的隨機崩潰,並且崩潰顯示在lua_gc上。

我將lua編譯爲帶有存根庫的dll,並使用它鏈接了我的應用程序和Lua模塊。那之後我沒有觀察到撞車事故。

那麼不推薦將Lua C模塊靜態鏈接到Lua?

回答

2

簡短的回答就是不要這樣做。

Logn ansewer。 1.你必須確保你的兩個Lua庫都使用相同的標誌(對齊,基本類型尺寸)編譯。 2.內存分配器必須共享。如果一個Lua靜態庫分配緩衝區其他應該可以釋放它)(使用具有相同動態運行時的MSVC鏈接。 請勿與靜態鏈接msvcrt.lib)。

其他依賴於操作系統。 在Windows上,您可以從您的應用程序導出Lua API,並將鏈接模塊DLL與此可執行文件鏈接。 (Ru SciTE團隊做到這一點)

但是再次只是與動態Lua庫鏈接。

更新

存在着一個多種變異。 你可以靜態鏈接所有需要的Lua模塊。 所以它應該是安全的。