go - cgo on windows: navngivning af indlæst dll

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at bruge gorocksdb, som er en cgo-pakke, der vækker rocksdb biblioteket på vinduer. [6]



  • Jeg byggede biblioteket rocksdb med vcpkg, som gav mig som output rocksdb-shared.dll . Jeg sætte byggestien til min PATH.

  • Jeg installerede msys64 for at få gcc

  • Jeg har indstillet CGO\_CFLAGS="-I/path/to/rocksdb/include" og
    CGO\_LDFLAGS="-L/path/to/rocksdb -lrocksdb -lstdc++ -lm -lz -lbz2 -lsnappy -llz4 -lzstd"

  • Jeg har omdøbt rocksdb-shared.dll til librocksdb.dll fordi linkeren kræver, at dll begynder med lib

  • Jeg foretager kommandoen go get ...

  • Jeg kører min test go-fil, og jeg får fejlen The programer can't start because rocksdb-shared.dll is missing ...

  • Hvis jeg omdøber det til rocksdb-shared.dll , mangler bygningen, fordi linkeren ikke kan finde librocksdb.dll

  • Den eneste måde at gøre det på, er at have både rocksdb-shared.dll og librocksdb.dll i PATH



Hvorfor den eksekverbare holder loading rocksdb-shared.dll ? Jeg finder ingen henvisning til det i cgo-pakken.

Bedste reference


Jeg tror, ​​jeg fandt svaret på mit spørgsmål.


Jeg tror, ​​jeg kan ikke omdøbe den udarbejdede dll, fordi dll'en 'reference' sig selv som dette navn. Så det blev ikke ladet korrekt.


For at løse mit problem har jeg omdøbt parameteren i LDFLAG fra -lrocksdb til -lrocksdb-delt i både min miljøvariabel og i denne fil [7]