Как скомпилировать Berkeley DB 5.3.28 для кросс-компилятора MXE?

Есть ли у кого-нибудь решение для создания Berkeley DB для среды кросс-компиляции MXE?

Когда я запускаю свой сценарий сборки:

 #!/bin/bash

 MXE_PATH=/path/to/mxe
 
 db=db-5.3.28

 rm -rf ./$db/build_mxe
 mkdir -p ./$db/build_mxe
 cd ./$db/build_mxe
 
 sed -i "s/WinIoCtl.h/winioctl.h/g" ../src/dbinc/win_db.h

 CC=$MXE_PATH/usr/bin/i686-w64-mingw32.static-gcc \
 CXX=$MXE_PATH/usr/bin/i686-w64-mingw32.static-g++ \

 ../dist/configure \
     --build=x86_64-pc-linux-gnu \
     --host=x86 \
     --disable-replication \
     --enable-cxx \
     --enable-mingw \
     --prefix=/path/to/dev/mingw_db

  make -j6; make -j6 install

Компилятор предупреждает об отсутствии файла direct.h:

../src/dbinc/win_db.h:21:20: fatal error: direct.h: No such file or directory compilation terminated.

direct.h и все зависимые файлы находятся в каталоге mxe / usr / i686-w64-mingw32.static / включают

Итак, как заставить компилятор использовать эти файлы?

Вы пробовали передать этот каталог компилятору с помощью параметра -I?

Jan Schatz 27.08.2018 11:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
381
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Разработчики MXE постепенно улучшали процесс сборки для MXE. Berkeley DB теперь легко скомпилировать нужную версию, используя make db в исходном коде MXE, и если требуется конкретная версия, вы можете изменить ее в src / db.mk. и снова запустите make db, чтобы обновить файлы соответственно.

Во время процесса make возникает одна ошибка, при которой libtool не находит двоичные файлы db должным образом из-за текущего патча db (src / db-2-install-exe.patch) в MXE, который применяется во время компиляции db, который будет устаревшим. Однако пока исправление состоит в том, чтобы удалить файл патча db и добавить следующий флаг в src / db.mk с другими параметрами конфигурации после (MXE_CONFIGURE_OPTS):

--program-transform-name='s,.exe,,;s,\(.*\),\1.exe,' \

Это намного проще и сохраняет исходный код MXE более чистым и управляемым, чем использование специального скрипта компиляции для BDB.

Я пытаюсь исправить сборку db на mxe; Я пробовал это, но это не работает; Я смотрю на временное дерево сборки, и я не вижу никаких отличий от предыдущего (и те же ошибки, которые не могут найти файлы, потому что все они имеют расширение .exe)

Gregorio Litenstein 28.06.2020 07:36

Убедитесь, что ваше дерево сборки чистое. Возможно переклонить mxe github. Я давно этим не занимался. Возможно, с тех пор они обновили свой процесс компиляции. Я не в курсе процедуры, если она изменилась. Проверьте mxe.cc и github.com/mxe. Также обратитесь к bitcointalk.org/index.php?topic=1080289.0 за некоторыми рекомендациями.

cryptoboy 28.06.2020 13:56

Я просто попытался выполнить базовую настройку mxe, скомпилировав mxe с make cc, а затем построив базу данных с помощью make db, и проблем не было. Он компилировался с db v6.1.26. Затем я переключил его на версию 5.3.28 и тоже скомпилировал без ошибок.

cryptoboy 28.06.2020 15:40

Я использую gcc8 и пытаюсь обновить его до последней стабильной версии (6.1.26, которая находится на главном сервере, однако у меня возникла такая же проблема)

Gregorio Litenstein 01.07.2020 20:59

@GregorioLitenstein Не могли бы вы опубликовать файл журнала, который является результатом ошибки компиляции для gcc и db (отдельно), на pastebin.com. У меня только что возникла ошибка при использовании скрипта обновления mxe (make update-package-gcc (также gc), затем make gcc), чтобы проверить / обновить gcc, который он загрузил версии 10.1.0 и 8.0.4 для gc. Если у нас возникнут те же ошибки, вам следует отправить новую проблему на github mxe.

cryptoboy 02.07.2020 02:03

@GregorioLitenstein. Файл журнала должен находиться по пути (пример) >> /path/to/mxe/log/gcc_i686-w64-mingw32.static

cryptoboy 02.07.2020 02:20

Это будет не то же самое, потому что у меня нет проблем со сборкой gcc. И мои сборки db не работают из-за неожиданного расширения .exe для сгенерированных файлов; и по какой-то причине кажется, что аргумент --program-transform-name не работает.

Gregorio Litenstein 04.07.2020 08:52

@GregorioLitenstein, можешь ли ты написать мне DM о Discord Demon # 9191?

cryptoboy 04.07.2020 12:16
Ответ принят как подходящий

Я улучшил свой сценарий сборки и решил свой вопрос:

Мне пришлось исправить исходный скрипт, который затем усовершенствовал сборку.

Правильный синтаксис выглядит следующим образом:

#!/bin/bash

## Path to MXE source
 MXE_PATH=/home/demon/dev/mxe
## Path for mingw headers
 MXE_INCLUDE=$MXE_PATH/usr/i686-w64-mingw32.static/include

## Path to db source
 db=db-6.1.26

## Make a clean working tree and Create working DIR 
## You can also use `make distclean` within build_mxe to start fresh
 
 rm -rf ./$db/build_mxe
 mkdir -p ./$db/build_mxe

## Enter working directory
 cd ./$db/build_mxe

## Correct naming of header file
 sed -i "s/WinIoCtl.h/winioctl.h/g" ../src/dbinc/win_db.h


## Define CC and C++ compiler & user level commands
export CC=$MXE_PATH/usr/bin/i686-w64-mingw32.static-gcc
export CXX=$MXE_PATH/usr/bin/i686-w64-mingw32.static-g++
export AR=$MXE_PATH/usr/bin/i686-w64-mingw32.static-ar
export STRIP=$MXE_PATH/usr/bin/i686-w64-mingw32.static-strip
export RANLIB=$MXE_PATH/usr/bin/i686-w64-mingw32.static-ranlib

### Find mingw headers in non-standard directory
export CPPFLAGS=-I$MXE_INCLUDE


## Configure the build
 ../dist/configure \
     --build=x86_64-pc-linux-gnu \
     --host=x86 \
     --disable-replication \
     --enable-cxx \
     --enable-mingw \
     --program-transform-name='s,.exe,,;s,\(.*\),\1.exe,' \
     --prefix=/home/demon/dev/mxe_db \
     --exec-prefix=/home/demon/dev/mxe_db

## Build DB and install it
 make -j(nproc); make -j(nproc) install

Исправленные проблемы:

  • Задайте переменную среды для поиска заголовков mingw с помощью переменной CPPFLAGS
  • Установите правильные команды компилятора и пользовательские команды для переменных среды CC, CXX, AR, STRIP и RANLIB для компилятора MXE с помощью export <variable>

Это сработало!

Вы можете следить за полной сборкой здесь:

https://pastebin.com/aP5rWQSC

Содержимое готовой сборки каталога output (--prefix): Build output (--prefix) directory

@GregorioLitenstein Это должно решить сборку за вас.

cryptoboy 05.07.2020 19:18

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