首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为MXE交叉编译器编译伯克利DB 5.3.28?

如何为MXE交叉编译器编译伯克利DB 5.3.28?
EN

Stack Overflow用户
提问于 2018-06-01 08:26:26
回答 2查看 494关注 0票数 2

有没有人可以为MXE的交叉编译环境构建伯克利DB?

当我运行构建脚本时:

代码语言:javascript
复制
 #!/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缺少:

代码语言:javascript
复制
../src/dbinc/win_db.h:21:20: fatal error: direct.h: No such file or directory compilation terminated.

H和所有相关文件都存在于mxe/usr/i686-w64-mingw32.static/include目录中

那么,如何强制编译器使用这些文件呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-05 17:14:53

我改进了我的构建脚本并解决了我的问题:

我必须修复原来的脚本,然后完善构建。

正确的语法如下:

代码语言:javascript
复制
#!/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

修正后的问题:

  • 将环境变量设置为使用CPPFLAGS变量定位混合报头
  • 使用export <variable>将CC、CXX、AR、to和RANLIB环境变量的正确编译器命令和用户命令设置为MXE的编译器

这招成功了!

您可以在这里遵循完整的构建:

https://pastebin.com/aP5rWQSC

输出(-前缀)目录的内容已完成构建:

票数 0
EN

Stack Overflow用户

发布于 2018-08-27 13:20:16

MXE开发人员缓慢地改进了MXE的deps的构建过程。伯克利DB现在很容易在MXE源代码中使用make db编译所需的版本,如果需要特定的版本,可以在src/db.mk中修改它。再次运行make db将相应地更新文件。

在make过程中,由于MXE中当前的db修补程序(src/ db -2-install-exe.修补程序)中的数据库修补程序(src/db-2-install-exe.修补程序),libtool没有找到正确的db二进制文件,这是一个错误,该修补程序在编译db期间应用,将被废弃。但是,在此期间,修复方法是删除db修补程序文件,并在src/db.mk中添加以下标志,并在(MXE_CONFIGURE_OPTS)之后添加其他配置选项:

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

这比为BDB使用自定义编译脚本要简单得多,并且保持了MXE源代码的清洁/可管理性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50639135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档