#windows #go #dll #hunspell
# #Windows #Вперед #dll #hunspell
Вопрос:
Я пытаюсь использовать библиотеку hunspell в проекте Go в Windows.
У меня есть скомпилированная библиотека DLL Windows (x64) и соответствующий файл заголовка (который написан на C), но я не могу связать его с программой Go.
Что я пробовал до сих пор:
package main
//#cgo CFLAGS: -Id:/Go/HunSpellTest/build/
//#cgo LDFLAGS: -Ld:/Go/HunSpellTest/build/llibhunspell-1.7-0.dll -llibhunspell-1.7-0
// #include <stdlib.h>
// #include <hunspell.h>
import "C"
import (
"unsafe"
)
func main() {
C.Hunspell_create()
}
Но с любой комбинацией путей и имен файлов (с расширением, без расширения, без номера версии, с относительным и абсолютным путем, с использованием косой или обратной косой черты) Я получил ту же ошибку:
undefined reference to __imp_Hunspell_create
Я пытался добавить этот путь к глобальной PATH
переменной или поместить библиотеки DLL в общесистемную папку, но ничего не получалось.
Пожалуйста, обратите внимание, что я могу связать библиотеку DLL с syscall
пакетом и вызвать Hunspell_create
метод, но я хотел бы использовать библиотеку, как в пакете hunspellgo.
Комментарии:
1. тебя бы это устроило? pkg.go.dev/golang.org/x/ sys/ windows#NewLazyDLL2. @StevenPenny: Нет, я могу включить DLL через пакет системного вызова, но я хотел бы использовать его с cgo.
3. достаточно справедливо — но имейте в виду
syscall
, что пакет устарел
Ответ №1:
C.Hunspell_create()
отсутствуют const char* affpath
const char* dpath
параметры и.
Возможно, вам также не хватает некоторых mingw-w64/msys2/cygwin
пакетов deps в Windows. похоже, что hunspellgo не тестировался в Windows. Для компиляции hunspell в Windows вам нужна linux-подобная система сборки (например, mingw-w64/msys2/cygwin
). Смотрите на https://github.com/hunspell/hunspell#compiling-on-windows . Golang с поддержкой cgo в Windows также нуждается в некоторых gcc/g
deps.
Комментарии:
1. Я знаю, что в нем отсутствуют его параметры, но это не проблема. Проблема в том, что компилятор не может найти сам метод. У меня установлен mingw-w64, но я не хочу компилировать сам пакет hunspell в Windows, я хотел бы использовать предварительно скомпилированную DLL.
2. Вам нужно
dlltool -dllname hunspell.dll --def hunspell.def --output-lib libhunspell.a
. В gcc / g не использует hunspell.dll или hunspell.lib в качестве файла библиотеки.3. @Fenistil Вы можете
syscall
использовать DLL-файл в Windows. Но с CGO для этого нуженlib{name}.a
файл. Сначала вы должны сгенерировать ее.undefined reference to __imp_Hunspell_create
означает, что у вас отсутствуетlibhunspell.a
файл. см. cygwin.com/cygwin-ug-net/dll.html .4. Спасибо, я попробую это и отвечу
5. @Fenistil может быть, вы можете использовать это напрямую: github.com/mlt/hunspell/releases/download/tst /…