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, так и в этом файле

Другие вопросы по тегам