2017-11-14 23 views
0

루아 5.3을 32 비트 C++ DLL로 컴파일하고 실행합니다. DLL에는 lua.cpp 및 luac.cpp를 제외한 모든 lua 코드가 들어 있습니다. exe는 lua.cpp를 컴파일하고 DLL을 사용하여 루아 인터프리터를 실행합니다. 이것은 명령 행에서 독자적으로 실행할 때 잘 동작합니다. 이 DLL과 exe를 사용하여 IDE에서 실행할 수 있기를 바랍니다.루아가 C++로 컴파일 될 때 ZeroBrane Studio IDE 디버거를 사용하는 방법

/ZeroBraneStudio/bin/lua53.dlllua53.exe을 내 버전으로 바꾸면 스크립트 (두 개의 녹색 화살표 클릭)를 실행할 수 있습니다. 그러나 디버깅 다음과 같은 오류를주고, 작동하지 않습니다

The procedure entry point luaL_addlstring could not be located in the dynamic link library lua53.dll.

나는 디버거가 luasocket을 활용하기 때문에 이런 일이 있음을 볼 수 있습니다. \ZeroBraneStudio\bin\clibs53\socket\core.dlllua53.dll에 종속적이며 c로 컴파일 된 lua를 포함 할 것으로 예상됩니다.

그래서 올바른 해결책은 무엇입니까? luasocket을 C++로 컴파일하는 것입니까?

(그리고, 그렇다면, 사람이 그렇게에 대한/지침 지침이 있는가? 나는이에 아무것도 찾을 수 없었습니다.)

감사합니다.

답변

0

좋아, 나는 그것을 작동시킬 수 있었다. 해결책은 luasocket을 C++로 컴파일하는 것이 었습니다. * https://github.com/diegonehab/luasocket

  • 모든 * .c 인 파일에 명칭 변경 : 여기이 작업을 수행하는 방법에 대한 지침을 제공하지 않지만 몇 가지 포인트는 희망 같은 문제로 다른 사람을 돕기 위해 여기에서

    • 있어의 luasocket Visual Studio에서 통화 당은 Lua.props에
    • 명칭 변경 Lua52.props (I 루아 5.3을 사용하지만이 호환되는 것 같아 무엇입니까?) 해당 폴더에
    • 배치 루아 헤더와 lib 디렉토리
    • 오픈 솔루션 2012
    • 고정 파일의 이름 바꾸기와 같은 프로젝트 파일의 사소한 문제를 해결할 수 있습니다.
    • luaopen_socket_core 및 luaopen_mime_core 함수 선언에 'extern "C"'를 추가했습니다 (라이브러리를로드하는 데 lua가 필요합니다).
    • 빌드 솔루션
    • clibs53/socket 및 clibs53/mime 폴더에 새 dll을 복사했습니다.

    필자는 Dependency Walker를 사용하여이 문제를 해결했습니다. 미래에 더 자세한 정보가 필요하면 의견을 남겨주세요.

  • 0

    정확히 DLL이 컴파일 된 방법을 잘 모르겠지만 오류 메시지는 luaL_addlstring 및 기타 기능을 내보낼 수 없다는 것을 나타냅니다. 기호를 올바르게 내 보낸 경우 luasocket을로드하고 디버깅을 수행 할 수 있어야합니다. this thread for the related discussion을 참조하십시오.

    또한 documentation에 설명 된대로 path.lua53 구성 설정을 사용하여 IDE가 자신의 복사본을 사용하도록 구성 할 수 있으므로 lua53 라이브러리와 실행 파일을 바꿀 필요가 없습니다.

    +0

    안녕하세요 Paul, DLL이 맹 글링 된 C++ 함수 이름을 내보내므로 함수를 찾을 수 없다는 오류 메시지가 표시됩니다.이름 맹 글링은 함수 이름이 C와 C++간에 다르게 내 보내어진다는 것을 의미합니다. 따라서 luasocket core.dll은 C 이름 'luaL_addlstring'을 찾고 있지만 맹 글링 된 이름 만 존재합니다. 루아 인터프리터 exe가 DLL을로드하여 실행할 수 있기 때문에 기호가 올바르게 내보내 졌음을 확신합니다. 구성 설정에 대한 정보를 보내 주셔서 감사합니다. –