Проблемы со сборкой примеров из Berkeley DB

Тема в разделе "WASM.BEGINNERS", создана пользователем trsoft, 2 ноя 2020.

  1. trsoft

    trsoft Member

    Публикаций:
    0
    Регистрация:
    18 июл 2018
    Сообщения:
    115
    Решил собрать кошелек bitcoin-а из исходников в MinGW, но во время сборки вылетели ошибки с неопределенными символами из библиотек Berkeley db. Библиотеки собраны самостоятельно в MinGW.
    В VS2020-12 все библиотеки и примеры собираются и работают без ошибок.
    Dev-CPP 5.11, gcc, g++ 4.9.2.
    Ld выдает ошибки:
    D:\DEV\VC++\EnvExample>make -f Makefile.win 1>111.txt
    EnvExample.o:EnvExample.cpp: (.text+0x305): undefined reference to `DbEnv::lol: bEnv(
    unsigned int)'
    EnvExample.o:EnvExample.cpp: (.text+0x3ec): undefined reference to `Db::lol: b(DbEnv*
    , unsigned int)'
    EnvExample.o:EnvExample.cpp: (.text+0x57a): undefined reference to `DbEnv::lol: bEnv(
    unsigned int)'
    collect2.exe: error: ld returned 1 exit status
    make: *** [EnvExample.exe] Error 1

    Я пробовал подкинуть рабочую библиотеку *.lib, но выскакивают те же ошибки.
    В чем проблема?
    В архивах рабочий пример для VS2012 и нерабочий для MinGW4.9.2 .
    сорц базы https://github.com/berkeleydb/libdb/releases/download/v5.3.28/db-5.3.28.tar.gz
     

    Вложения:

    • EnvExampleVS.rar
      Размер файла:
      1,9 МБ
      Просмотров:
      286
    • EnvExample.rar
      Размер файла:
      1,4 МБ
      Просмотров:
      265
  2. trsoft

    trsoft Member

    Публикаций:
    0
    Регистрация:
    18 июл 2018
    Сообщения:
    115
    Собираю 32-битную библиотеку в Windows 8 x64 из папки db-5.3.28\build_unix (build_mingw нет). Видимо, библиотека собирается с символьными именами unix. Указать ключи или платформу в Makefile?
    На др. форумах пишут, что нужно указать флаги -DB_WIN32 -m32 -D_REENTRANT и использовать компилятор g++ вместо gcc.
    Импортируемый символ DbEnv:
    EnvExample.o __ZN5DbEnvC1Ej
    libdb_cxx-5.3.dll.a __imp__ZTI5DbEnv
     
  3. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    185
    trsoft, а зачем вам нужно собирать в MinGW если у вас всё нормально собирается в VS,или там есть исходники для сборки в MinGW ?
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    -l флаг подключает библиотеку в линковку.
     
  5. trsoft

    trsoft Member

    Публикаций:
    0
    Регистрация:
    18 июл 2018
    Сообщения:
    115
    Надо собрать в mingw, потому что проекты кошельков собираются без проблем только в этой среде.
    код собрался с библиотекой libdb_cxx.a изBerkeleydb 4.8.30, в которой совпадают символьные имена , но сборка базы данных завершается с ошибкой. Но программа не работает, библиотека тоже "глючная", не может передать флаг в DB_ENV.
    Это библиотека единственная рабочая, в остальных компилятор ругается на неправильные индексы (ранлиб, ар, пляски с бубном и тд).
    Как собрать библиотеки Berkeleydb 4.8.30?

    Хорошо, что при установке Линукса, ее не нужно собирать из исходников.
    --- Сообщение объединено, 4 ноя 2020 ---
    Есть возможность сделать библиотеку *.a из рабочей *.lib. Собрал implib из исходников, запустил, получил файл определений .def.
    Имена заманглены компилятором VS C++, надо исправлять вручную (по дефу из libdb_cxx.a). Дальше dlltool выдает пустой файл xxxxxxx.a