如何为MXE交叉编译工具编译Berkeley DB 5.3.28?
解决MXE交叉编译Berkeley DB时direct.h缺失的问题
我之前也碰到过类似的MXE交叉编译Berkeley DB的坑,你的问题本质上是configure脚本没有正确识别MXE提供的MinGW头文件路径,导致编译器找不到direct.h这类Windows专属头文件。下面是几个经过验证的解决方案:
显式指定头文件和库路径,修正目标平台参数
你需要在configure命令前添加CFLAGS和CXXFLAGS强制编译器指向MXE的include目录,同时用LDFLAGS指定库路径。另外,原来的--host=x86参数太模糊,configure无法正确识别目标平台,必须改成MXE对应的完整目标三元组。修改后的脚本片段如下:CC=$MXE_PATH/usr/bin/i686-w64-mingw32.static-gcc \ CXX=$MXE_PATH/usr/bin/i686-w64-mingw32.static-g++ \ CFLAGS="-I$MXE_PATH/usr/i686-w64-mingw32.static/include" \ CXXFLAGS="-I$MXE_PATH/usr/i686-w64-mingw32.static/include" \ LDFLAGS="-L$MXE_PATH/usr/i686-w64-mingw32.static/lib" \ ../dist/configure \ --build=x86_64-pc-linux-gnu \ --host=i686-w64-mingw32.static \ --disable-replication \ --enable-cxx \ --enable-mingw \ --prefix=/path/to/dev/mingw_db确认win_db.h的大小写修正彻底
你已经做了sed -i "s/WinIoCtl.h/winioctl.h/g" ../src/dbinc/win_db.h的修改,这一步是必要的,但可以再检查下文件里是否还有其他大小写不符的头文件引用(比如Windows.h写成windows.h之类的),避免后续出现类似问题。提前验证MXE工具链的可用性
先确认你的MXE工具链本身能正常找到direct.h,执行下面的命令测试:$MXE_PATH/usr/bin/i686-w64-mingw32.static-gcc -E -x c++ - <<EOF #include <direct.h> int main() { return 0; } EOF如果这个命令没有报错,说明工具链本身没问题,问题确实出在configure的参数配置上。
按照上面的方法调整后,重新执行make -j6 && make install应该就能顺利完成编译了——我之前用这个流程成功把Berkeley DB 5.3.28编译成了MXE的MinGW静态库。
内容的提问来源于stack exchange,提问作者Demon
相关产品推荐
相关产品推荐

