cgo на windows: наименование загруженной dll
Я пытаюсь использовать gorocksdb, который представляет собой пакет cgo, который запускает библиотеку rocksdb в Windows.
- Я построил библиотеку rocksdb с помощью vcpkg, который выдает мне в качестве выходных данных rocksdb-shared.dll. Я установил путь сборки для моего PATH.
- Я установил msys64, чтобы иметь gcc
- Я поставил
CGO_CFLAGS="-I/path/to/rocksdb/include"
а такжеCGO_LDFLAGS="-L/path/to/rocksdb -lrocksdb -lstdc++ -lm -lz -lbz2 -lsnappy -llz4 -lzstd"
- Я переименовал утесы dd-shared.dll в librocksdb.dll, потому что компоновщик требует DLL для начала с
lib
- Я делаю
go get ...
команда - Я запускаю свой тестовый файл go и получаю ошибку
The programer can't start because rocksdb-shared.dll is missing ...
- Если я переименую его обратно в rocksdb-shared.dll, сборка завершится неудачно, потому что компоновщик не может найти librocksdb.dll
- Единственный способ заставить его работать - это иметь в PATH и rockdb-shared.dll, и librocksdb.dll
Почему исполняемый файл продолжает загружать rocksdb-shared.dll? Я не нахожу ссылки на это в пакете cgo.
1 ответ
Решение
Я думаю, что нашел ответ на свой вопрос.
Я думаю, что не могу переименовать скомпилированную dll, потому что dll "ссылается" на это имя. Так что он не будет загружаться должным образом.
Чтобы решить мою проблему, я просто переименовал параметр в LDFLAG из -lrocksdb в -lrocksdb-shared как в моей переменной environement, так и в этом файле