【问题标题】:Cross Compiling Python setup交叉编译 Python 设置
【发布时间】:2014-09-25 15:13:34
【问题描述】:

我正在尝试使用 Mingw-w64 在 Ubuntu 14.04 上构建 GObject-Introspection。我目前正在运行 64 位 Linux 并尝试为 32 位 Windows 目标构建。

我的第一次尝试是使用安装在 Wine 中的 Python 2.7.8,然而,这不起作用,因为 Python 的路径分隔符设置为 '\'(好吧 '\')而不是 Linux 的 '/'。因此,我尝试在 Ubuntu 中使用 Python 2.7。

使用 Ubuntu 提供的 Python 不会通过配置步骤。 Config.log 显示如下:

In file included from /usr/include/python2.7/Python.h:8:0,
                 from conftest.c:40:
/usr/include/python2.7/pyconfig.h:78:3: error: #error unknown multiarch locatio#
 # error unknown multiarch location for pyconfig.h
   ^
In file included from /usr/include/python2.7/pyport.h:4:0,
                 from /usr/include/python2.7/Python.h:58,
                 from conftest.c:40:
/usr/include/python2.7/pyconfig.h:78:3: error: #error unknown multiarch locatio#
 # error unknown multiarch location for pyconfig.h
   ^
In file included from /usr/include/python2.7/Python.h:58:0,
                 from conftest.c:40:
/usr/include/python2.7/pyport.h:241:9: error: #error "This platform's pyconfig.#
 #       error "This platform's pyconfig.h needs to define PY_FORMAT_SIZE_T"
         ^
In file included from /usr/include/python2.7/pymath.h:4:0,
                 from /usr/include/python2.7/Python.h:77,
                 from conftest.c:40:
/usr/include/python2.7/pyconfig.h:78:3: error: #error unknown multiarch locatio#
 # error unknown multiarch location for pyconfig.h
   ^

我了解 pyconfig.h 定义的平台之间存在一些差异。我是否应该将这些文件收集到操作系统似乎正在做的单独目录中(/usr/include/x86_64-linux-gnu/python2.7/pyconfig.h)?什么是 Python 的正确设置,以便我可以交叉编译 GObject-Introspection?

环境设置

export PREFIX=$CROSS_DIR/windows
export INSTALL_PREFIX=$PREFIX
export TOOLCHAIN_FILE=$PREFIX/toolchain_windows.cmake

export PLATFORM=WINDOWS

export HOST=i686-w64-mingw32
export BUILD=x86_64-linux-gnu

export COMPILER_INCLUDE_DIR=/usr/$HOST/include
export COMPILER_LIB_DIR=/usr/$HOST/lib
export MINGW_32_LIBS=/usr/lib/gcc/$HOST/4.8


export CFLAGS="-I$PREFIX/include -I$COMPILER_INCLUDE_DIR"
export CPPFLAGS="-I$PREFIX/include -I$COMPILER_INCLUDE_DIR"
export CXXFLAGS="-I$PREFIX/include -I$COMPILER_INCLUDE_DIR"
export LDFLAGS="-L$PREFIX/lib -L$COMPILER_LIB_DIR"
export XDG_DATA_DIRS="$PREFIX/share"

export LD_LIBRARY_PATH=$PREFIX/lib:$PREFIX/bin:$COMPILER_LIB_DIR
export LIBRARY_PATH=$PREFIX/lib:$PREFIX/bin:$COMPILER_LIB_DIR
export INCLUDE_PATH=$PREFIX/include:$COMPILER_INCLUDE_DIR
export C_INCLUDE_PATH=$PREFIX/include:$COMPILER_INCLUDE_DIR
export CPLUS_INCLUDE_PATH=$PREFIX/include:$COMPILER_INCLUDE_DIR


export CC=$HOST-gcc
export CXX=$HOST-g++
export LD=$HOST-ld
export RANLIB=$HOST-ranlib
export AR=$HOST-ar
export AS=$HOST-as
export STRIP=$HOST-strip


export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig

配置 Windows Python 运行

./configure --build="$BUILD" --host="$HOST" --prefix="$PREFIX" \
            PKG_CONFIG="$PREFIX/bin/pkg-config.exe" \
            PYTHON="$WINE_PYTHON_PATH/python.exe" \
            PYTHON_INCLUDES="-I$WINE_PYTHON_PATH/include" \
            PYTHON_LIBS="-L$WINE_PYTHON_PATH/libs -lpython27" \
            PYTHON_LIB_LOC="$WINE_PYTHON_PATH/Lib" \
            CFLAGS="$CFLAGS -I$PREFIX/include/glib-2.0 -I$PREFIX/lib/glib-2.0/include/" \
            CPPFLAGS="$CPPFLAGS -I$PREFIX/include/glib-2.0 -I$PREFIX/lib/glib-2.0/include/"

配置 Linux Python 运行

./configure --build="$BUILD" --host="$HOST" --prefix="$PREFIX" \
            PKG_CONFIG="$PREFIX/bin/pkg-config.exe" \
            PYTHON="/usr/bin/python2.7" \
            PYTHON_INCLUDES="-I/usr/include/python2.7/ -I/usr/include/x86_64-linux-gnu/python2.7/" \
            PYTHON_LIBS="-L/usr/lib/x86_64-linux-gnu/ -lpython2.7" \
            PYTHON_LIB_LOC="/usr/lib/python2.7/" \
            CFLAGS="$CFLAGS -I$PREFIX/include/glib-2.0 -I$PREFIX/lib/glib-2.0/include/" \
            CPPFLAGS="$CPPFLAGS -I$PREFIX/include/glib-2.0 -I$PREFIX/lib/glib-2.0/include/"

【问题讨论】:

  • 通常,您只需安装适当的交叉编译工具,然后将--host=<arch> 传递给configure。然后它设置工具和查找目录的适当路径
  • @ivan_pozdeev,我同意。通常这是通常所做的。但是,在这种情况下,事情似乎并没有像人们通常期望的那样工作。我已经添加了环境设置脚本和我尝试过的配置行。有什么我错过的吗,或者你能想到我应该尝试的东西吗?

标签: python cross-compiling mingw-w64 gobject-introspection


【解决方案1】:

尝试将其插入到您的 Makefile 中:

CFLAGS+=        \
                -DHAVE_SSIZE_T \
                -DPY_FORMAT_SIZE_T="l" \
                -DPY_FORMAT_LONG_LONG="ll" \

【讨论】:

  • 我很抱歉。我们花了几天时间试图在 2014 年 9 月完成这项工作。在无法弄清楚之后,我们开始使用其他东西。因此,我/我无法测试您的答案。如果其他人可以验证这是否有效,我将点击接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 2020-12-15
  • 2020-11-16
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
相关资源
最近更新 更多