본문 바로가기

Lua

Lua : 다른 언어와 연동시 print로 문자열 안나올때 직접 출력 함수 연결하기

lua의 경우 다른 언어 보통 C랑 연동할때 print로 출력할 경우 기본적으로 stdout에 써지도록 되어있지만 저처럼 그걸 바꾸고 싶을때는 라이브러리 코드를 살짝 고치고 빌드 해주면 됩니다.

 

lauxlib.h 에서

extern size_t lua_writestring(const void* ptr, size_t size);

/* print a newline and flush the output */
#if !defined(lua_writeline)
//#define lua_writeline()        (lua_writestring("\n", 1), fflush(stdout))
#define lua_writeline()        lua_writestring("\n", 1)
#endif

/* print an error message */
// #if !defined(lua_writestringerror)
// #define lua_writestringerror(s,p) \
//         (fprintf(stderr, (s), (p)), fflush(stderr))
// #endif
#if !defined(lua_writestringerror)
#define lua_writestringerror lua_writestring
#endif

이런식으로 lua_writestring을 선언만 해주는 형식으로 바꾼 다음 lua 라이브러리를 사용할때 이 함수를 필요에 맞게 정의만 해주면 되고 lua_writeline과 lua_writestringerror도 필요에 맞게 바꿔주면 됩니다.

 

그래서 저 같은 경우 zig에서 이렇게 사용합니다.

comptime {
    @export(&lua_writestring, .{ .name = "lua_writestring", .linkage = .strong });
}

fn lua_writestring(ptr: ?*const anyopaque, size: usize) callconv(.C) usize {
    system.print("{s}", .{@as([*]const u8, @ptrCast(ptr.?))[0..size]});
    return size;
}

system.print는 제가 쓰려고 만든 함수고 아무튼 이런식으로 사용하면 되겠습니다.

'Lua' 카테고리의 다른 글

CMake 로 빌드 할 수 있는 Lua(링크)  (0) 2024.10.07