Nachdem ich mich durch viele Fehler beim Kompilieren eines Altcoin-Fensters qt gearbeitet habe.
Alles kompiliert gut bis zur letzten Phase, wenn das System die exe zusammenstellt.
Sie finden den Fehler unten. leveldb ist installiert und die Dateien libleveldb.a und libmemenv.a befinden sich korrekt in src/leveldb ... Jede Hilfe zur Lösung dieses Problems wäre willkommen.
uuid -lgdi32 -lboost_system-mgw48-mt-1_54 -lboost_filesystem-mgw48-mt-1_54 -lboo
st_program_options-mgw48-mt-1_54 -lboost_thread-mgw48-mt-1_54 -lboost_chrono-mgw
48-mt-1_54 -lQtGui4 -lQtCore4
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x433): undefined reference to `l
eveldb::DB::Open(leveldb::Options const&, std::string const&, leveldb::DB**)'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x73f): undefined reference to `l
eveldb::Status::ToString() const'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x866): undefined reference to `l
eveldb::WriteBatch::~WriteBatch()'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x89f): undefined reference to `l
eveldb::WriteBatch::WriteBatch()'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x921): undefined reference to `l
eveldb::WriteBatch::~WriteBatch()'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x944): undefined reference to `l
eveldb::Status::ToString() const'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0xac4): undefined reference to `l
eveldb::WriteBatch::Iterate(leveldb::WriteBatch::Handler*) const'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0xaf5): undefined reference to `l
eveldb::WriteBatch::Handler::~Handler()'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0xb24): undefined reference to `l
eveldb::Status::ToString() const'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x14a9): undefined reference to `
leveldb::Status::ToString() const'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x176f): undefined reference to `
leveldb::WriteBatch::Put(leveldb::Slice const&, leveldb::Slice const&)'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x18b2): undefined reference to `
leveldb::Status::ToString() const'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x1a57): undefined reference to `
leveldb::Options::Options()'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x1ae0): undefined reference to `
leveldb::Options::Options()'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x1b35): undefined reference to `
leveldb::NewLRUCache(unsigned int)'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x1b44): undefined reference to `
leveldb::NewBloomFilterPolicy(int)'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x1b9c): undefined reference to `
leveldb::NewBloomFilterPolicy(int)'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x2021): undefined reference to `
leveldb::WriteBatch::~WriteBatch()'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x211d): undefined reference to `
leveldb::Status::ToString() const'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x35c3): undefined reference to `
leveldb::WriteBatch::Delete(leveldb::Slice const&)'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x6488): undefined reference to `
leveldb::WriteBatch::~WriteBatch()'
./build\txdb-leveldb.o:txdb-leveldb.cpp:(.text+0x64b8): undefined reference to `
leveldb::WriteBatch::~WriteBatch()'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: ./build\tx
db-leveldb.o: bad reloc address 0x2 in section `.text$_ZN5boost16exception_detai
l10clone_baseD1Ev[__ZN5boost16exception_detail10clone_baseD1Ev]'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link
failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
Prüfen Sie, ob Sie libleveldb.a
alle notwendigen Dateien korrekt kompiliert haben. Könnten Sie bitte die folgenden Befehle ausführen und die Ausgabe zurücksenden?
ar tv libmemenv.a
und ar tv libleveldb.a
. Wenn die Ausgabe etwas ähnliches ist
rw-rw-rw- 0/0 432255 Apr 15 16:56 2014 memenv.o
rw-rw-rw- 0/0 21322 Apr 15 16:56 2014 port_win.o
dann könnte das Problem sein, dass Ihr Windows find.exe
Ihr MSYS außer Kraft setzt file.exe
. Beide funktionieren sehr unterschiedlich und sind nicht austauschbar. Das Makefile von LevelDB verwendet den Unix-Stil find.exe
. find.exe
Sie können dies beheben, indem Sie Ihr MSYS- Verzeichnis explizit vor das Windows- find.exe
Verzeichnis setzen (das so etwas wie sein sollte C:\Window\System32\find.exe
).
Dies war ein sehr schwer aufzuspürendes Problem, und Sie können meinen Fortschritt (und den von Ron, der mir freundlicherweise sehr geholfen hat, danke Ron!) im „ offiziellen“ Thread zum Erstellen von Bitcoin auf bitcointalk.org sehen . Ab Seite 28 und weiter nach unten, bis Sie meinen Namen nicht mehr sehen (dort heiße ich auch Jori, das ist mein richtiger Name).
das heißt leveldb nicht richtig kompiliert, auf cygwin verwende ich
make -f makefile.unix clean
TARGET_OS="Linux"; make -f makefile.unix
mit mingw TARGET_OS
vielleicht Linux
oder NATIVE_WINDOWS
auch versuchen, die Berechtigung zu ändern leveldb/build_detect_platform
, um es als ausführbar zu machen
David Schwarz
Jori