Есть ли у кого-нибудь решение для создания 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 / включают
Итак, как заставить компилятор использовать эти файлы?





Разработчики 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)
Убедитесь, что ваше дерево сборки чистое. Возможно переклонить mxe github. Я давно этим не занимался. Возможно, с тех пор они обновили свой процесс компиляции. Я не в курсе процедуры, если она изменилась. Проверьте mxe.cc и github.com/mxe. Также обратитесь к bitcointalk.org/index.php?topic=1080289.0 за некоторыми рекомендациями.
Я просто попытался выполнить базовую настройку mxe, скомпилировав mxe с make cc, а затем построив базу данных с помощью make db, и проблем не было. Он компилировался с db v6.1.26. Затем я переключил его на версию 5.3.28 и тоже скомпилировал без ошибок.
Я использую gcc8 и пытаюсь обновить его до последней стабильной версии (6.1.26, которая находится на главном сервере, однако у меня возникла такая же проблема)
@GregorioLitenstein Не могли бы вы опубликовать файл журнала, который является результатом ошибки компиляции для gcc и db (отдельно), на pastebin.com. У меня только что возникла ошибка при использовании скрипта обновления mxe (make update-package-gcc (также gc), затем make gcc), чтобы проверить / обновить gcc, который он загрузил версии 10.1.0 и 8.0.4 для gc. Если у нас возникнут те же ошибки, вам следует отправить новую проблему на github mxe.
@GregorioLitenstein. Файл журнала должен находиться по пути (пример) >> /path/to/mxe/log/gcc_i686-w64-mingw32.static
Это будет не то же самое, потому что у меня нет проблем со сборкой gcc. И мои сборки db не работают из-за неожиданного расширения .exe для сгенерированных файлов; и по какой-то причине кажется, что аргумент --program-transform-name не работает.
@GregorioLitenstein, можешь ли ты написать мне DM о Discord Demon # 9191?
Я улучшил свой сценарий сборки и решил свой вопрос:
Мне пришлось исправить исходный скрипт, который затем усовершенствовал сборку.
Правильный синтаксис выглядит следующим образом:
#!/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
Исправленные проблемы:
export <variable>Это сработало!
Вы можете следить за полной сборкой здесь:
Содержимое готовой сборки каталога output (--prefix):

@GregorioLitenstein Это должно решить сборку за вас.
Вы пробовали передать этот каталог компилятору с помощью параметра -I?