블로그는 나의 힘!
[ Programing ]/Lua Scirpt2022. 3. 6. 00:57

루아를 공부하면서 가장 힘들었던 부분이 C++과 연동하는 부분이 었습니다.
아직 초보 프로그래머라서 그런지 인터넷으로 루아 배포판을 다운받고

교재를 따라 코딩을 하였는데 엄청난 오류와 경고들 ㅠㅠ
인터넷을 뒤져봐도 어떻게 처리 해야되는지 잘 나와 있지 않더군여.... (내가 못찾았나 ㅠㅠ)

연동하는 프로그램을 작성 하기 이전에 기본적인 설정을 해야 합니다.

이 부분을 몰라서 많이 헤맨거죠 ㅡ.ㅡ;;

 


======= 루아 배포판의 기본적인 설정 =======

1. 우선 루아 배포판을 다운 받는다.

http://www.lua.org/ftp/ 

lua-5.0.2를 다운을 받고 D:\\lua-5.0.2폴드로 압출을 풀었음.
(참고 : 루아는 사장된 언어로 다음 버전 없음)


 

2. 루아 소스 파일들을 정적라이브러리로 만든다.

루아소스 전부를 매번 프로젝트를 만들때마다 추가 시켜 주어도 되지만 많이 번거럽고 변경 사항에 유동적이지
못하기 때문에 정적라이브러리로 만듭니다.
    
한번 만들어 놓으면 다음에 사용할 경우는 

프로젝트 속성에서 링커 -> 추가 종속성 -> lua.lib(경로포함) 를 입력하고
 
프로젝트 속성에서 C/C++ -> 추가 포함 디렉터리 ->
D:\\lua-5.0.2\\include(루아 소스 경로)를 입력하면 됩니다.

   

   << 만드는 방법 >>

   비주얼 스튜디오 2005를 사용하기 때문에 그것을 기초로 설명 하겠습니다.

   새 프로젝트 -> Win32 콘솔 응용 프로그램 -> 정적 라이브러리 -> 빈 프로젝트로 프로젝트를 생성한다.
   생성된 프로젝트에서 루아 배포판의 소프 파일들을 추가 한다.

   D:\\lua-5.0.2\src와 D:\\lua-5.0.2\src\lib 폴드 안의 모든 소스들...
   보기 좋게 하기위해 기존의 리소스, 소스, 헤더 필터들은 지워 버리고 lua로 새로운 필트를 만들어 추가한다.

   프로젝트 속성에서 C/C++ -> 추가 포함 디렉터리 -> D:\\lua-5.0.2\\include(루아 소스 경로)를 입력하고
   프로젝트를 컴파일한다. 그러면 debug폴드에 lua.lib 파일이 생성된다.

 

3. 실제 프로젝트에서 루아 라이브러리를 추가 한다.

실제 작업할 프로젝트를 생성한 후 
프로젝트 속성에서 C/C++ -> 추가 포함 디렉터리 -> D:\\lua-5.0.2\\include(루아 소스 경로)
를 입력하고 프로젝트 속성에서 링커 -> 추가 종속성 -> lua.lib를 입력(경로 포함) 한다.

     

 

======= 루아와 C++의  연동 =======

루아와 C++를 연동하기 위해서 기본적으로 루아 환경, 루아 글루 함수, 루아 API에 대해서 알아야 한다.

이것들의 개념을 간단히 짚어보고 넘어 갈까 합니당~~

 

1. 루아 환경 ( 루아 상태[Lua state])

루아의 실행에 필요한 모든 자료(컴파일된 함수, 변수, 기타 작업용 메모리)로 구성된다.
그 자료는 lua_State라고 하는 구조체에 저장된다.

C++로 작성된 호스트 코드에서는 루아 환경을 루아에 자료를 보내거나 루아로부터 자료를 받는 수단으로 사용한다. 

모든 자료 전달은 루아가 관리하는 스택을 거치며, 루아 API 함수로 접근하는 루아 스택은 시스템
스택과는 무관한, 루아가 직접 관리하는 스택이다.

실질적으로 루아와 C++을 연동하여 자료들을 공유 할경우는 루아 스택에서 자료를 push, call 해야 한다.

루아 스택에 관해서는 나중에 다시 언급 할 것 입니다.

 

2. 루아글루 함수

C++로 작성된 함수를 루아 스크립트 안에서 호출할 수 있는데, 그런 함수를 루아 글루 함수라고 한다.
그런 함수가 C++ 세계를 루아 환경과 연결하는 '접착제(glue)' 역할을 한다.

보통 루아 함수와 동일하더라고 실제로는 C++로 만들어진 것이므로, C++ 프로그래머가 사용할 수 있는 모든
자원에 접근할 수 있다는 점에서 보토의 루아 함수와 구별된다.

루아 글루 함수는 루아 스크립트에서 C++ 자료를 읽고, 수정하고, C++ 고유의 함수를 실행할 수 있는 수단이다.

 

3. 루아 API

루아에서 정의된 함수를 C++ 코드에서 직접 실행하는 수단을 제공 한다.
루아 API는 문자열 형태로 된 루아 코드를 루아 인터프리터에 넘겨주고 그것을 실행하는 수단도 제공 한다.

 

※ 실제 연동은 다음의 정리 - 간단한 예제(링크)를 이용하여 설명~ ^^* 

 



 

Posted by Mister_Q