2017-06-14 10 views
0

Ich versuche, mkottman/luacrypto mit Xcode zu verwenden. Ich habe lcrypto.c in mein Projekt eingefügt und kompiliert. Es war Erfolg. Jetzt habe ich einfach .lua Datei mit einfachen Code:Wie benutzt man luacrypto?

crypto = require 'crypto' 
assert(crypto.hex, "missing crypto.hex") 

Wenn ich laufen, erhalte ich die Fehler "module 'crypto' not found:".

Kann jemand helfen? Was ich vermisst habe?

+0

Ich muss es statisch in meinen Code verbinden. Wie benutzt man in diesem Fall luacrypton? –

Antwort

1

Lua kann die Bibliothek nicht finden. Sie sollten einen Fehler bei den Speicherorten sehen, an denen nach der Datei gesucht wird. Zum Beispiel:

[string "REPL"]:1: module 'crypto' not found:No LuaRocks module found for crypto 
     no field package.preload['crypto'] 
     no file '/home/phil/.luarocks/share/lua/5.1/crypto.lua' 
     no file '/home/phil/.luarocks/share/lua/5.1/crypto/init.lua' 
     no file '/usr/local/share/lua/5.1/crypto.lua' 
     no file '/usr/local/share/lua/5.1/crypto/init.lua' 
     no file './crypto.lua' 
     no file '/usr/local/lib/lua/5.1/crypto.lua' 
     no file '/usr/local/lib/lua/5.1/crypto/init.lua' 
     no file '/usr/share/lua/5.1/crypto.lua' 
     no file '/usr/share/lua/5.1/crypto/init.lua' 
     no file '/home/phil/.luarocks/lib/lua/5.1/crypto.so' 
     no file '/usr/local/lib/lua/5.1/crypto.so' 
     no file './crypto.so' 
     no file '/usr/lib/x86_64-linux-gnu/lua/5.1/crypto.so' 
     no file '/usr/lib/lua/5.1/crypto.so' 
     no file '/usr/local/lib/lua/5.1/loadall.so' 
stack traceback: 
     /usr/local/share/lua/5.1/repl/init.lua:73: in function </usr/local/share/lua/5.1/repl/init.lua:72> 
     (tail call): ? 
     [C]: in function 'require' 
     [string "REPL"]:1: in main chunk 
     [C]: in function 'xpcall' 
     /usr/local/share/lua/5.1/repl/init.lua:101: in function 'old_value' 
     /usr/local/share/lua/5.1/repl/init.lua:250: in function 'handleline' 
     /usr/local/share/lua/5.1/repl/sync.lua:33: in function 'run' 
     ...r/local/lib/luarocks/rocks/luarepl/0.8-1/bin/rep.lua:41: in main chunk 
     [C]: ? 

Als Alternative könnte man es über den Paketmanager installieren luarocks:

$ luarocks search luacrypto 

Search results: 
=============== 


Rockspecs and source rocks: 
--------------------------- 

luacrypto 
    0.3.2-2 (rockspec) - https://luarocks.org 
    0.3.2-2 (src) - https://luarocks.org 
    0.3.2-1 (rockspec) - https://luarocks.org 
    0.3.2-1 (src) - https://luarocks.org 
    0.3.0.20120524-1 (rockspec) - https://luarocks.org 
    0.3.0.20120524-1 (src) - https://luarocks.org 
    0.2.0-2 (rockspec) - https://luarocks.org 
    0.2.0-2 (src) - https://luarocks.org 
    0.2.0-1 (rockspec) - https://luarocks.org 
    0.2.0-1 (src) - https://luarocks.org 

luacryptor 
    1.0-1 (rockspec) - https://luarocks.org 

und installieren Sie es mit luarocks install luacrypto.

+0

Philipp, danke für die Antwort. Ich möchte es statisch verknüpfen. Ich erwartete, dass ich in meinem objektiven c-Code "luaopen_crypto (L)" nennen und dann lua-Skript ausführen könnte, das luacrypto verwendet. Wie kann ich das machen? Grüße, Valery. –

0

Philipp hat recht über fehlendes Modul. Wenn ich crypto.so in den Suchpfad einfüge, funktioniert der Lua-Code require "crypto". Aber ich muss luacrypto statisch in mein C++ Projekt einbinden. Ich habe folgende Lösung gefunden.

//file.cpp: 
luaopen_crypto(L); 
lua_setglobal(L, "crypto"); 

-- file.lua: 
--crypto = require "crypto" 
print(crypto.hex("123")) 

Dies ist nur eine Problemumgehung. Ich setze crypto als globale Variable und ich kann es in .lua Datei verwenden. Aber jeder Versuch, anzurufen, wird fehlschlagen.