나는 lua를 가지고 있는데, luarocks를 사용하지 않았습니다.c 컴파일 중 luarocks와 함께 lua 용 yaml을 설치하는 데 문제가 있습니다
편집 : 윈도우 시스템
에 I v202-3 from here에서 luasocket-2.0.2-3.win32-x86.rock 파일을 다운로드하여 성공적으로 설치 luasocket. 이전 버전이지만 작동합니다.
그러나 yaml을 설치해야 yaml 파일을 사용할 수 있습니다. 이제 * .src.rock 파일이나 .rockspec 파일을 사용하여 설치해야합니다.
나는 시도했다 :
luarocks install yaml
주는 :
D:\user\workspace\_lua>luarocks install yaml
Warning: Failed searching manifest: Failed fetching manifest for https://luarocks.org - Failed downloading https://luarocks.org/manifest - C:\Users\user\AppData\Local/LuaRocks/Cache/https___luarocks.org/manifest
Warning: Failed searching manifest: Failed fetching manifest for https://raw.githubusercontent.com/rocks-moonscript-org/moonrocks-mirror/master/ - Failed downloading https://raw.githubusercontent.com/rocks-moonscript-org/moonrocks-mirror/master/manifest - C:\Users\user\AppData\Local/LuaRocks/Cache/https___raw.githubusercontent.com_rocks-moonscript-org_moonrocks-mirror_master_/manifest
Warning: Failed searching manifest: Failed fetching manifest for http://luafr.org/moonrocks/ - Failed downloading http://luafr.org/moonrocks/manifest - C:\Users\user\AppData\Local/LuaRocks/Cache/http___luafr.org_moonrocks_/manifest
Warning: Failed searching manifest: Failed fetching manifest for http://luarocks.logiceditor.com/rocks - Failed downloading http://luarocks.logiceditor.com/rocks/manifest - C:\Users\user\AppData\Local/LuaRocks/Cache/http___luarocks.logiceditor.com_rocks/manifest
Error: No results matching query were found.
그래서, 그때 yaml-1.1.2-1.src.rock
를 다운로드하고 명령 실행 : luarocks install yaml-1.1.2-1.src.rock
이 내가 종속성 YAML을 한 것으로 얘기를 - > lub -> luafilesystem. 그럼 나는 다운로드 :
- luafilesystem-1.6.3-2.src.rock
- LUB-1.1.0-1.src.rock
- YAML - 1.1.2-1.src.rock을
그리고 나는 그들에게 결과에 하나씩 설치 :
luarocks install luafilesystem-1.6.3-2.src.rock
- OK- 를 1,396,340,443,210 - OK
luarocks install yaml-1.1.2-1.src.rock
- FAILED,
오류 로그 아래 오류를 참조하십시오이 빌드가 실패하는 이유
이D:\user\downloads\luarocks-2.3.0-win32\extras>luarocks install yaml-1.1.2-1.src.rock
Using yaml-1.1.2-1.src.rock... switching to 'build' mode
mingw32-gcc -O2 -c -o src/api.o -ID:/user/install/lua/luarocks/include src/api.c -Isrc
mingw32-gcc -O2 -c -o src/b64.o -ID:/user/install/lua/luarocks/include src/b64.c -Isrc
mingw32-gcc -O2 -c -o src/dumper.o -ID:/user/install/lua/luarocks/include src/dumper.c -Isrc
mingw32-gcc -O2 -c -o src/emitter.o -ID:/user/install/lua/luarocks/include src/emitter.c -Isrc
mingw32-gcc -O2 -c -o src/loader.o -ID:/user/install/lua/luarocks/include src/loader.c -Isrc
mingw32-gcc -O2 -c -o src/lyaml.o -ID:/user/install/lua/luarocks/include src/lyaml.c -Isrc
mingw32-gcc -O2 -c -o src/parser.o -ID:/user/install/lua/luarocks/include src/parser.c -Isrc
mingw32-gcc -O2 -c -o src/reader.o -ID:/user/install/lua/luarocks/include src/reader.c -Isrc
mingw32-gcc -O2 -c -o src/scanner.o -ID:/user/install/lua/luarocks/include src/scanner.c -Isrc
mingw32-gcc -O2 -c -o src/strtod.o -ID:/user/install/lua/luarocks/include src/strtod.c -Isrc
In file included from src/strtod.c:23:0:
src/strtod.c:24:17: warning: '_errno' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes]
extern int errno;
^
mingw32-gcc -O2 -c -o src/writer.o -ID:/user/install/lua/luarocks/include src/writer.c -Isrc
mingw32-gcc -shared -o yaml/core.dll src/api.o src/b64.o src/dumper.o src/emitter.o src/loader.o src/lyaml.o src/parser.o src/reader.o src/scanner.o src/strtod.o src/writer.o D:/user/install/lua/luarocks/lua5.1.lib -lMSVCR80
src/api.o:api.c:(.text+0x395): undefined reference to '_imp__yaml_realloc'
src/api.o:api.c:(.text+0x412): undefined reference to '_imp__yaml_string_extend'
:
LOTS OF THESE
:
src/scanner.o:scanner.c:(.text.unlikely+0x29d0): undefined reference to '_imp__yaml_queue_extend'
src/scanner.o:scanner.c:(.text.unlikely+0x29e8): undefined reference to '_imp__yaml_token_delete'
collect2.exe: error: ld returned 1 exit status
Error: Build error: Failed compiling module yaml/core.dll
사람이 알고 있나요? - 여기에서 직접 얻었습니다 : 가장 다운로드 된 버전 인 https://luarocks.org/modules/gaspard/yaml/1.1.2-1
... 작동 할 것 같습니까?
내 말은, 오류가 무엇인지 알 수는 있지만 왜 오류가 발생하는지 이해할 수 없습니다. 나는이 문제를 해결하려면 어떻게? ... 어떤 도움 감사합니다 :)
UPDATE siffiejoe의 의견에
감사합니다, 나는 YAML 바위를 컴파일 할 수 있었다. 출력은 다음과 같습니다.
D:\user\downloads\luarocks-2.3.0-win32\extras>luarocks install yaml-1.1.2-1.src.rock CC="gcc -DYAML_DECLARE_STATIC"
Using yaml-1.1.2-1.src.rock... switching to 'build' mode
gcc -DYAML_DECLARE_STATIC -O2 -c -o src/api.o -ID:/user/install/lua/luarocks/include src/api.c -Isrc
gcc -DYAML_DECLARE_STATIC -O2 -c -o src/b64.o -ID:/user/install/lua/luarocks/include src/b64.c -Isrc
gcc -DYAML_DECLARE_STATIC -O2 -c -o src/dumper.o -ID:/user/install/lua/luarocks/include src/dumper.c -Isrc
gcc -DYAML_DECLARE_STATIC -O2 -c -o src/emitter.o -ID:/user/install/lua/luarocks/include src/emitter.c -Isrc
gcc -DYAML_DECLARE_STATIC -O2 -c -o src/loader.o -ID:/user/install/lua/luarocks/include src/loader.c -Isrc
gcc -DYAML_DECLARE_STATIC -O2 -c -o src/lyaml.o -ID:/user/install/lua/luarocks/include src/lyaml.c -Isrc
gcc -DYAML_DECLARE_STATIC -O2 -c -o src/parser.o -ID:/user/install/lua/luarocks/include src/parser.c -Isrc
gcc -DYAML_DECLARE_STATIC -O2 -c -o src/reader.o -ID:/user/install/lua/luarocks/include src/reader.c -Isrc
gcc -DYAML_DECLARE_STATIC -O2 -c -o src/scanner.o -ID:/user/install/lua/luarocks/include src/scanner.c -Isrc
gcc -DYAML_DECLARE_STATIC -O2 -c -o src/strtod.o -ID:/user/install/lua/luarocks/include src/strtod.c -Isrc
In file included from src/strtod.c:23:0:
src/strtod.c:24:17: warning: '_errno' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes]
extern int errno;
^
gcc -DYAML_DECLARE_STATIC -O2 -c -o src/writer.o -ID:/user/install/lua/luarocks/include src/writer.c -Isrc
mingw32-gcc -shared -o yaml/core.dll src/api.o src/b64.o src/dumper.o src/emitter.o src/loader.o src/lyaml.o src/parser.o src/reader.o src/scanner.o src/strtod.o src/writer.o D:/user/install/lua/luarocks/lua5.1.lib -lMSVCR80
Updating manifest for D:\user\install\lua\luarocks\systree/lib/luarocks/rocks
yaml 1.1.2-1 is now built and installed in D:\user\install\lua\luarocks\systree (license: MIT)
그래서 설치되어 있다고합니다. 내가 YAML의 packge를 사용하려고 할 때 그것을 발견하지 않습니다
local yaml = require("yaml")
local data = yaml.load("mytest.yaml")
시스템은이 yaml.lua 또는 yaml.dll을 찾을 수 없음을보고합니다. 그런 다음 * .lua와 *를 검색했습니다.내 luarocks 폴더에 dll을 내가 발견
예를 들어D:\user\install\lua\luarocks\systree>dir *.lua *.dll /b /s
D:\user\install\lua\luarocks\systree\lib\lua\5.1\lfs.dll
D:\user\install\lua\luarocks\systree\lib\lua\5.1\mime\core.dll
D:\user\install\lua\luarocks\systree\lib\lua\5.1\socket\core.dll
D:\user\install\lua\luarocks\systree\lib\lua\5.1\yaml\core.dll
D:\user\install\lua\luarocks\systree\lib\luarocks\rocks\luafilesystem\1.6.3-2\tests\test.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\ltn12.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\mime.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\socket.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\lub\Autoload.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\lub\Dir.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\lub\init.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\lub\Param.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\lub\Template.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\socket\ftp.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\socket\http.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\socket\smtp.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\socket\tp.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\socket\url.lua
D:\user\install\lua\luarocks\systree\share\lua\5.1\yaml\init.lua
.rock 파일을 사용할 수 있었기 때문에, 나는 luarocks install luasocket-2.0.2-3.win32-x86.rock
와 luasocket를 설치할 수 있었다. 그래서 socket.lua가 있음을 알 수 있습니다. YAML, LUB 및 luafilesystem 들어 ... 을 나는 위치를 다양한 설치 볼 수 있지만 .lua 또는 .dll 파일에는이없는 내가 특별히 YAML에 대한 더 많은 검색 :
D:\user\install\lua\luarocks\systree>dir *yaml* /b /s
D:\user\install\lua\luarocks\systree\lib\lua\5.1\yaml
D:\user\install\lua\luarocks\systree\lib\luarocks\rocks\yaml
D:\user\install\lua\luarocks\systree\lib\luarocks\rocks\yaml\1.1.2-1\yaml-1.1.2-1.rockspec
D:\user\install\lua\luarocks\systree\share\lua\5.1\yaml
무슨 소리가 ... 그래서 그때 가서 자식에서 프로젝트를 복제 (IT 내 자식 클론 (포트 443)를 차단 바보 내 때문에 zip 파일을 다운로드했다
그래서 결국 내가 시도 YAML 마스터 폴더에 다음, 즉 정렬 가지고 :. 을luarocks make yaml-1.1.2-1.rockspec CC-"gcc -DYAML_DECLARE_STATIC"
이전과 같은 효과가있었습니다. 그래서 지금 내가 자식에서 구축 할 때,라는 파일이 있었다 2
.src.rock 및 .rockspec 유형 ...
내가 다시 붙어 :(
UPDATE 모두 시도 yaml.lua는 최상위 레벨에 있습니다.하지만 그 내용은 모두 yaml/init.lua
입니다. 그걸로 무엇을해야할지 모르겠습니다. 내 ..install\lua\luarocks\systree\share\lua\5.1
dir에 복사를 시도했지만, 테스트 루아 projam을 실행하면 오류가납니다. .. 무슨 일이 벌어지고 있어도 설치가 어렵지 않습니다. (
UPDATE 3
siffiejoe의 훌륭한 대답을 이어 받아,이 yaml을 다소 설치했습니다.
package.path = "D:\\user\\install\\lua\\luarocks\\systree\\share\\lua\\5.1\\?\\init.lua;" .. package.path
print("package.path: " .. package.path)
local yaml = require("yaml")
local data = yaml.load("mytest.yaml")
내가 수동으로 지금은 테스트입니다 잠시 동안 루아 경로를 추가하고 :
가 여기 내 루아 스크립트입니다 :하지만 그것을 실행하는 버그가 있습니다. 나는이 프로그램을 실행할 때 나는 창을 얻을 :
그리고처럼 내 로그 같습니다 그래서이 MSVCR80.dll에 돌아올 것으로 보인다
D:\user\install\lua\luarocks\systree\share\lua\5.1\?\init.lua;D:\user\install\lua\luarocks\systree\share\lua\5.1\?.lua;D:\user\install\lua\luarocks\systree\share\lua\5.1\?\init.lua;./?.lua;./?/init.lua;./lua/?.lua;./lua/?/init.lua;D:\user\install\lua\zerobrane\lualibs/?/?.lua;D:\user\install\lua\zerobrane\lualibs/?.lua;D:\user\install\lua\zerobrane\lualibs/?/?/init.lua;D:\user\install\lua\zerobrane\lualibs/?/init.lua
D:\user\install\lua\zerobrane\bin\lua.exe: error loading module 'lfs' from file 'D:\user\install\lua\luarocks\systree\lib\lua\5.1\lfs.dll':
The specified procedure could not be found.
stack traceback:
[C]: at 0x66df0460
[C]: in function 'require'
...\install\lua\luarocks\systree\share\lua\5.1\lub\init.lua:17: in main chunk
[C]: in function 'require'
...install\lua\luarocks\systree\share\lua\5.1\yaml\init.lua:25: in main chunk
[C]: in function 'require'
D:\user\workspace\_lua\myluatest.lua:3: in main chunk
[C]: at 0x00402a57
Program completed in 56.64 seconds (pid: 15856).
...이 제작되지 않은 감각을 나에게, 나는 이것이 마이크로 소프트와 관련이 있다고 가정한다. 내가 읽은 것들 중 일부는 바꿔 줄 필요가있는 손상된 MSVCR80.dll이 될 수있다. 그러나 이것이 왜 발생하는지 아직 확실하지 않습니다. 이견있는 사람?
#ifdef WIN32
# if defined(YAML_DECLARE_STATIC)
# define YAML_DECLARE(type) type
# elif defined(YAML_DECLARE_EXPORT)
# define YAML_DECLARE(type) __declspec(dllexport) type
# else
# define YAML_DECLARE(type) __declspec(dllimport) type
# endif
#else
# define YAML_DECLARE(type) type
#endif
Windows에서 기본적으로 모든 YAML 관련 기능이 링커 오류 메시지에 __declspec(dllimport)
합니다 (_imp__
접두사로했다 장식되어 있음을 의미합니다 :
아마 mingw (traceback/logs에서'mingw-gcc '사용)를 사용하여 LuaRocks를 설치했기 때문에 yaml 설치가 MS VCR 라이브러리를 사용하려고합니다 :'-lMSVCR80' – hjpotter92
@ hjpotter92 좋은 지적입니다, 나는 그 파일이 마이크로 소프트 파일인지 알지 못했다. 그곳에서 뭐하는거야, 그의 다른 libs 모두 mingw32-gcc와 함께 일했다. 어떤 생각이 어떻게 해결할 수 있습니까? 내 PC에 MSVC2010이 있습니다. ** 편집 ** 또한 그의 git repo에서 그의 instuction은'luarocks make' (프로젝트를 복제 한 후에)를 실행한다고 말합니다 - 이것은 또한 동일한 에러를냅니다. –
@code_fodder :'luarocks install yaml-1.1.2-1.src .rock CC = "mingw32-gcc -DYAML_DECLARE_STATIC"' – siffiejoe