Skip to content

kiwigo: Kiwi C 라이브러리 v0.23.0과의 API 호환성 문제 - 함수 시그니처 불일치 #41

@Mireu-Lab

Description

@Mireu-Lab

kiwigo (한국어 형태소 분석기 Kiwi의 Go 바인딩)를 Kiwi C 라이브러리 v0.23.0과 함께 사용하려고 할 때, C 함수 시그니처 불일치로 인해 컴파일이 실패합니다. Go 래퍼가 기대하는 함수 시그니처와 v0.23.0 C 라이브러리가 제공하는 시그니처가 다릅니다.


환경

항목 버전
kiwigo v0.0.0-20251015030951-8eb509f28aa5 (pseudo-version, 태그 없음)
Kiwi C 라이브러리 v0.23.0
Go 1.26.1
OS Linux (Ubuntu 22.04, Codespaces)
아키텍처 x86_64

라이브러리 소스


재현 방법

  1. Kiwi C 라이브러리 v0.23.0을 다운로드하고 압축 해제:

    cd /path/to/project
    wget https://github.com/bab2min/Kiwi/releases/download/v0.23.0/kiwi_lnx_x86_64_v0.23.0.tgz
    tar xzf kiwi_lnx_x86_64_v0.23.0.tgz
  2. kiwigo를 사용하는 간단한 Go 프로그램 작성:

    package main
    
    import (
        "fmt"
        "github.com/codingpot/kiwigo"
    )
    
    func main() {
        analyzer, err := kiwigo.NewAnalyzer()
        if err != nil {
            panic(err)
        }
        defer analyzer.Close()
        
        result := analyzer.Analyze("안녕하세요")
        fmt.Printf("Result: %v\n", result)
    }
  3. kiwigo 의존성 추가:

    go get github.com/codingpot/kiwigo@latest
  4. Kiwi 라이브러리 경로를 포함하여 빌드:

    export CGO_CFLAGS="-I/path/to/kiwi/include"
    export CGO_LDFLAGS="-L/path/to/kiwi/lib -lkiwi"
    export LD_LIBRARY_PATH="/path/to/kiwi/lib:$LD_LIBRARY_PATH"
    go build

예상 동작

프로그램이 성공적으로 컴파일되고, kiwigo 패키지가 Kiwi C 라이브러리 v0.23.0을 초기화하며 오류 없이 한국어 형태소 분석을 수행해야 합니다.


실제 동작

컴파일이 여러 C 함수 시그니처 불일치 오류로 실패합니다:

# github.com/codingpot/kiwigo
/go/pkg/mod/github.com/codingpot/kiwigo@v0.0.0-20251015030951-8eb509f28aa5/kiwi.go:73:64: 
not enough arguments in call to (_Cfunc_kiwi_init)
    have (*_Ctype_char, _Ctype_int, _Ctype_int)
    want (*_Ctype_char, _Ctype_int, _Ctype_int, _Ctype_int)

/go/pkg/mod/github.com/codingpot/kiwigo@v0.0.0-20251015030951-8eb509f28aa5/kiwi.go:105:87: 
too many arguments in call to (_Cfunc_kiwi_analyze)
    have (_Ctype_kiwi_h, *_Ctype_char, _Ctype_int, _Ctype_int, _Ctype_kiwi_morphset_h, _Ctype_kiwi_pretokenized_h)
    want (*_Ctype_struct_kiwi_s, *_Ctype_char, _Ctype_int, _Ctype_struct___0, *_Ctype_struct_kiwi_pretokenized)

/go/pkg/mod/github.com/codingpot/kiwigo@v0.0.0-20251015030951-8eb509f28aa5/kiwi.go:212:72: 
not enough arguments in call to (_Cfunc_kiwi_builder_init)
    have (*_Ctype_char, _Ctype_int, _Ctype_int)
    want (*_Ctype_char, _Ctype_int, _Ctype_int, _Ctype_int)

오류 분석

불일치는 다음을 나타냅니다:

  1. kiwi_init() 함수

    • kiwigo 기대값: 3개 인자
    • Kiwi v0.23.0 제공값: 4개 인자
    • kiwigo 래퍼에서 누락된 매개변수
  2. kiwi_analyze() 함수

    • kiwigo 기대값: 6개 인자 (특정 핸들 타입 포함)
    • Kiwi v0.23.0 제공값: 다른 인자 개수 및 구조체 타입
    • 완전한 시그니처 불일치
  3. kiwi_builder_init() 함수

    • kiwigo 기대값: 3개 인자
    • Kiwi v0.23.0 제공값: 4개 인자
    • kiwigo 래퍼에서 누락된 매개변수

근본 원인

kiwigo 패키지 (현재 공식 릴리스 태그가 없는 pseudo-version)는 이전 버전의 Kiwi C 라이브러리용으로 개발된 것으로 보입니다. v0.23.0이 아닌 다른 버전을 위해 작성되었습니다. C API가 발전했지만 Go 래퍼는 그에 맞게 업데이트되지 않았습니다.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions