我是lua的新手,這可能很簡單,但我無法弄清楚。我做了整夜搜索,在這裏閱讀一些帖子,但不是我想要的。我終於找到了一個我不滿意的跛腳解決方案,所以我在這裏尋求幫助。我想知道,每個iPhone應用程序都有一個資源包,並且lua腳本隨該包一起發佈。我想在C++中嵌入lua,並且此程序將作爲iPhone上的應用程序的一部分運行。lua require功能在iOS上找不到我需要的文件
// I printed out the bundle path:
bundle directory /var/mobile/Applications/C6CEF090-B99A-4B9B-ADAC-F0BEF46B6EA4/LuaThirdTry.app
說我有在同一文件夾兩個腳本文件(main.lua,mylib.lua),我把它們放在我的Xcode項目,舉辦這樣的:
somefolder
|--main.lua
|--mylib.lua
和main.lua是如下:
--main.lua
print(package.path)
require("mylib")
很明顯,我想從mylib.lua使用代碼,但是,我從Lua VM錯誤:
/usr/local/share/lua/5.2/?.lua;/usr/local/share/lua/5.2/?/init.lua;/usr/local/lib/lua/5.2/?.lua;/usr/local/lib/lua/5.2/?/init.lua;./?.lua
PANIC: unprotected error in call to Lua API (...090-B99A-4B9B-ADAC-F0BEF46B6EA4/LuaThirdTry.app/test.lua:5: module 'mylib' not found:
no field package.preload['mylib']
no file '/usr/local/share/lua/5.2/mylib.lua'
no file '/usr/local/share/lua/5.2/mylib/init.lua'
no file '/usr/local/lib/lua/5.2/mylib.lua'
no file '/usr/local/lib/lua/5.2/mylib/init.lua'
no file './mylib.lua'
no file '/usr/local/lib/lua/5.2/mylib.so'
no file '/usr/local/lib/lua/5.2/loadall.so'
no file './mylib.so')
當我添加一行修改package.path,我得到了它正常運行:
--main.lua modified
print(package.path)
package.path = package.path .. ";/var/mobile/Applications/C6CEF090-B99A-4B9B-ADAC-F0BEF46B6EA4/LuaThirdTry.app/?.lua"
require("mylib")
但是,這是一個絕對路徑,絕對應該避免。 解決這個問題的一種方法是從c提供lua函數,它將運行時lua文件包中lua文件的完整路徑返回給lua腳本,並將package.path與該路徑連接起來,但我認爲不應該成爲這樣做的「官方」方式。
我注意到「./?.lua」在package.path變量中,我只是想知道爲什麼mylib.lua找不到,是不是針對同一目錄中的文件?
不好意思,所以問題是:我如何在iOS環境中體面地「要求」?
Schollii嗨,感謝您的回答,我不知道如何檢索運行腳本的路徑,任何線索? –
這就是我上面顯示的內容:arg數組是由解釋器爲你自動填充的。我已經更新了答案,hth。 – Schollii
是的,它完美地與獨立的lua解釋器一起工作,我試過了,謝謝。可悲的是,我似乎沒有arg可用於嵌入在C++代碼中的lua。 –