FFI 기초: ffi.cdef와 ffi.load
LuaJIT의 FFI 모듈로 C 유형을 선언하고 공유 라이브러리를 불러옵니다.
FFI 기초: ffi.cdef와 ffi.load은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
FFI란 무엇입니까
LuaJIT의 FFI (외부 함수 인터페이스)를 사용하면 C 래퍼 코드를 작성하지 않고도 Lua에서 C 라이브러리 함수를 호출하고 C 자료 구조를 직접 사용할 수 있습니다.
FFI 불러오기
require("ffi")로 FFI 라이브러리를 불러오십시오. FFI는 LuaJIT에 내장되어 있으며 표준 PUC Lua에서는 사용할 수 없습니다.
local ffi = require("ffi")ffi.cdef: C 형식 선언
ffi.cdef(cDeclarations)는 C 선언을 구문 분석하여 형식과 함수 서명을 FFI에서 사용할 수 있게 합니다. 실제 코드를 컴파일하는 것이 아니라 형식 정보만 처리합니다.
ffi.cdef[[
int printf(const char *fmt, ...);
double sqrt(double x);
typedef struct { int x; int y; } Point;
]]ffi.load: 공유 라이브러리 불러오기
ffi.load(libname)은 공유 라이브러리를 불러오고, 선언된 C 함수가 필드로 들어 있는 객체를 반환합니다.
local C = ffi.C -- access to libc on POSIX
local m = ffi.load("m") -- libm
print(m.sqrt(2.0)) -- 1.414...libc 함수에 직접 접근하기
POSIX 시스템에서는 ffi.C를 사용하여 명시적으로 불러오지 않고도 모든 표준 C 라이브러리 함수에 접근할 수 있습니다.
ffi.cdef[[ int puts(const char *s); ]]
ffi.C.puts("Hello from C!")ffi.load 경로
전체 경로나 표준 라이브러리 이름을 전달하십시오. Linux에서는 libm.so에 "m"을, pthreads에는 "pthread"를 사용하는 식입니다.
구조체 선언
cdef에서 C 구조체를 선언한 다음 Lua에서 할당하고 접근하십시오.
ffi.cdef[[
typedef struct { float x, y, z; } Vec3;
]]
local v = ffi.new("Vec3", {1, 2, 3})
print(v.x, v.y, v.z) -- 1.0 2.0 3.0형식 주석과 한정자
cdef는 const, unsigned, int32_t, uint64_t와 같은 표준 C 형식 및 기타 형식을 지원합니다.
여러 번의 cdef 호출
ffi.cdef는 여러 번 호출할 수 있습니다. 중복 선언은 무시됩니다. 일반적으로 라이브러리별로 구성하십시오.
플랫폼별 차이
구조체 배치와 함수 서명은 플랫폼에 따라 다를 수 있습니다(Windows와 Linux, 32비트와 64비트 등). ffi.os와 ffi.arch를 사용하여 조건에 맞는 올바른 서명을 선언하십시오.
안전 참고 사항
FFI는 Lua의 형식 안전성을 우회합니다. C 선언이 잘못되면 메모리 손상, 세그멘테이션 오류 또는 정의되지 않은 동작이 발생합니다. 실제 C 헤더를 기준으로 선언을 항상 다시 확인하십시오.
FFI 기초 질문
ffi.cdef는 어떤 작업을 합니까?
복습: FFI 기초
ffi.cdef로 C 형식과 함수를 선언하고, ffi.load로 공유 라이브러리를 불러오십시오. ffi.C를 사용하면 libc에 직접 접근할 수 있습니다. 메모리 손상을 방지하려면 선언이 실제 C 헤더와 일치하는지 항상 확인하십시오.
자주 묻는 질문
“FFI 기초: ffi.cdef와 ffi.load” 강의는 무료인가요?
네 — “FFI 기초: ffi.cdef와 ffi.load” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“FFI 기초: ffi.cdef와 ffi.load”에서 뭘 배우나요?
LuaJIT의 FFI 모듈로 C 유형을 선언하고 공유 라이브러리를 불러옵니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Lua Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“FFI 기초: ffi.cdef와 ffi.load” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- FFI 기초: ffi.cdef와 ffi.load
- FFI를 통한 C 함수 호출
- FFI의 포인터, 구조체, 배열
- 콜백: Lua 함수를 C에 전달하기