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 |
---|