본문 바로가기
프로그래밍

[Lua] C에서 루아 라이브러리를 사용하는법 - (1/2)

by dladbru 2018. 7. 26.

Lua?

저도 정확히 왜 사용하는지는 모르지만, 게임 서버에서 많이 사용한다고 합니다.  많은 설정을 해야하는 게임서버가 있다고 예를 들어서 설명하면, 프로그래밍해둔것보다 더 유연하게 항상 다른 동작을 해야한다면  다른동작을 할때 마다 서버 파일을 빌드하는것은 비효율적일것입니다. 경험치 2배 이벤트를 할때 업데이트하고 이벤트가 끝났을 때 다시 업데이트를 하는말과 같죠. 

하지만 수초 이내에 lua 파일에 한줄만 변경을 하면된다면 메리트가 많겠죠? 나머지도 있겠지만 직접 해보겠습니다.



 lua-5.3.3_Win32_vc14_lib.zip


위 파일은 visual studio 2015 에서 사용할 수 있는 정적 루아 라이브러리입니다. 

다른 버전을 사용하고 있을 경우 소스를 받아 컴파일을 하거나 빌드되어 있는 다른 버전의 정적

라이브러리를 다운로드 하시면 됩니다.



<Figure 0. 쉽게 다운로드해서 쓸 수 있게 제공하는 파일들> 


URL: https://sourceforge.net/projects/luabinaries/files/5.3.4/Windows%20Libraries/Static/


이제 다운로드 하셨으면 압축을 풀어주시면 됩니다. 


<Figure 1. include 파일들>


include 폴더에 존재하는 파일들로 이를 제외한 "lua53.lib" 파일이 포함되어 있습니다. 버전에따라서 lua53.lib는 lua54.lib 가 될 수도, lua55.lib가 될 수도 있겠죠?


이제 Visual Studio 에서 프로젝트를 생성하고 C파일을 생성하신 뒤 따라하시면 될것 같습니다.


<Figure 2. Lua 쓰고싶어 ㅠㅠ>


Lua 라이브러리는 다운로드 받았지만, Visual Studio에서는 그게 어디있는지 알지 못합니다. 지금 부터 설정을 통해 작업중인 이 프로젝트에서 알 수 있게 해주어야합니다~


<Figure 3. 속성 - C/C++ - 일반 - 추가 포함 디렉터리 설정>


위에 사진에서 보았던  include 경로를 지정해주시면 됩니다.


<Figure 4. 속성 - 링커 - 일반 - 추가 라이브러리 디렉터리 설정>


include 이전 경로에 있었던 lua53.lib 파일의 경로를 적어주시면 됩니다.


으악 모두 설정하고 보니 [Figure 4] 사진 상단에 구성을 보시면 Debug가 아니고 Release네요.


이대로 설정을 끝마치고 Debug모드로 컴파일을 시도할 경우,  "'lua53.lib' 파일을 열 수 없습니다." 와 같은 에러는 물론 많은 에러를 만나볼 수 있을것입니다. 왜냐하면 lua53.lib 와 다른 환경에서 컴파일 된 경우 알 수 없는 에러를 많이 구경할 수 있기에 그렇습니다..


그래서 소스코드도 Release로 빌드 하시면 됩니다. 


<Figure 5. 빌드 성공>


최대한 원리도 모르고 사용하기엔 불편한감이 있으실거라 생각해 간단한 설명만을 하고자 합니다. 

 

4,5,6 , 10,11,12 번째 줄은 "__cplusplus" 가 참일 경우 extern "C"를 선언하는 코드입니다.  위 소스파일은 "main.cpp" 으로 cpp파일이기 때문에 __cplusplus 는 참이 됩니다.


결론적으로 C가 아닌 C++일때 C의 방식으로 추가하라고 지정해준것입니다.  C++과 C에서 차이가 있는 오버로딩과 관련이 있으나, 현재 설명하고자하는 내용하고는 거리가 멀어 자세히 알고 싶으시다면 검색을 추천드리겠습니다! 하지만 아래의 방식으로 이해하시면 될것 같습니다.


"extern "C"는 C++의 linkage방식을 사용하지 않고, C의 linkage방식을 사용하라고 컴파일러에게 알려주는 역할을 한다."


14번째 줄은 lib파일을 import 한것입니다. 우리는 include에 있는 정의되어 있는 함수들을 이제 호출 하게됩니다.  하지만 정의는 되어있어도, 관련된 기능은 구현되어 있지 않습니다. 그 기능들은 lib에 되어 있습니다. 정적(static) 라이브러리이니까요.


여기까지 이해가 되셨을지 모르겠네요 *^^* 



이제 Lua를 본격적으로 사용하는 일만 남았는데요!

다음에 작성되는 내용은 더 많은 내용을 담겠습니다. 

반응형

댓글