cgo на windows: наименование загруженной dll - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь использовать 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"
  • Я переименовал rocksdb-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

Почему исполняемый файл продолжает загружаться rocksdb-shared.dll ?Я не нахожу никаких ссылок на него в пакете cgo.

1 Ответ

0 голосов
/ 15 мая 2018

Мне кажется, я нашел ответ на свой вопрос.

Я думаю, что не могу переименовать скомпилированную dll, потому что dll "ссылается" на это имя. Так что он не будет загружаться должным образом.

Чтобы решить мою проблему, я просто переименовал параметр в LDFLAG из -lrocksdb в -lrocksdb-shared как в моей переменной environement, так и в этом файле

...