Linker — 외부 함수 연결자
Linker — 외부 함수 연결자
Linker는 Java 코드에서 외부 함수(foreign function)에 접근하고, 외부 함수에서 Java 코드에 접근할 수 있게 해주는 연결자입니다. 외부 함수는 보통 필요에 따라 로드할 수 있는 라이브러리에 존재합니다. 각 라이브러리는 특정 ABI(Application Binary Interface)에 따릅니다.
본문
ABI는 라이브러리가 빌드된 컴파일러, OS, 프로세서와 연관된 호출 규약(calling conventions)과 데이터 타입의 집합입니다. 예를 들어 Linux/x64의 C 컴파일러는 보통 SystemV ABI를 따르는 라이브러리를 빌드합니다. 연결자는 특정 ABI가 사용하는 호출 규약과 데이터 타입에 대한 상세한 지식을 가지고 있습니다.
public sealed interface Linker
특히 다음을 수행할 수 있습니다.
downcall method handle을 통해 Java 코드가 외부 함수에 링크되게 합니다.upcall stub생성으로 외부 함수가 Java 메서드 핸들을 호출하게 합니다.
주요 메서드
static Linker nativeLinker()
MethodHandle downcallHandle(MemorySegment address, FunctionDescriptor function, Linker.Option... options)
MethodHandle downcallHandle(FunctionDescriptor function, Linker.Option... options)
MemorySegment upcallStub(MethodHandle target, FunctionDescriptor function, Arena arena, Linker.Option... options)
SymbolLookup defaultLookup()
nativeLinker()— C 라이브러리 함수에 링크하는 데 사용하는 네이티브 연결자를 반환합니다.downcallHandle— 지정한 함수를 호출할MethodHandle을 만듭니다.upcallStub— Java 메서드 핸들을 외부에서 호출할 수 있게 하는 스텁MemorySegment를 만듭니다.defaultLookup()— 연결자가 선택한 기본 라이브러리 집합에 대한 심볼 조회를 반환합니다.