linux下gevent编译,Python的greenlet和gevent在Linux x86_64上的交叉编译

在linuxx86u64主机上,我尝试为PowerPC目标交叉编译一些附加的Python模块,具体来说是greenlet、gevent和{a3}。目前,我只能尝试交叉构建greenlet模块。在

使用此网站的信息:

我能够在构建环境中使用这个设置来交叉编译python2.7.2# Undo variables for cross-compile environment

unset ROOT

unset SDKDIR

unset KLIBDIR

unset NFSDIR

unset CONFIG

unset CONFIGURED

unset ARCH

unset OS

unset TOOLCHAIN_BASE

unset TOOLCHAIN_BIN

unset CROSS_COMPILE

unset c

unset KERNEL_DIR

unset AS

unset LD

unset CC

unset AR

unset STRIP

unset SSTRIP

unset OBJCOPY

unset OBJDUMP

unset MAKE

unset CFLAGS

# Set cross-compile variables:

export TOOLCHAIN=/opt/freescale/usr/local/gcc-4.3.74-eglibc-2.8.74-dp-2/powerpc-none-linux-gnuspe/bin/powerpc-none-linux-gnuspe-

export CC=${TOOLCHAIN}gcc

export CXX=${TOOLCHAIN}g++

export AR=${TOOLCHAIN}ar

export RANLIB=${TOOLCHAIN}ranlib

export BLDSHARED="${TOOLCHAIN}gcc -shared"

export LDSHARED="${TOOLCHAIN}gcc -shared"

export RFS="../../ltib/rootfs"

export CFLAGS="-save-temps -Wall -I${RFS}/usr/include -I${RFS}/include/python2.7 -L${RFS}/usr/lib -L${RFS}/lib"

export LDFLAGS="-I${RFS}/usr/include -I${RFS}/include/python2.7 -L${RFS}/usr/lib -L${RFS}/lib"

export CROSS_COMPILE=ppc-linux

export CROSS_COMPILE_TARGET=yes

export HOSTARCH=ppc-linux

export BUILDARCH=x86_64-linux-gnu

使用上面的脚本配置我的环境,然后尝试构建greenlet模块会产生以下结果:

^{pr2}$

为什么是设置.py从主机系统上的/usr/include/python2.7拉取?我在目标上找不到那个方向。如何为我的目标创建它?在

有什么建议吗?在

谢谢!在

特雷弗

更新1:

我对目标rootfs的主机副本的相对引用不正确。更正并重新运行收益率:$ python ./setup.py build

running build

running build_ext

building 'greenlet' extension

creating build

creating build/temp.linux-x86_64-2.7

/opt/freescale/usr/local/gcc-4.3.74-eglibc-2.8.74-dp-2/powerpc-none-linux-gnuspe/bin/powerpc-none-linux-gnuspe-gcc -save-temps -Wall -I../../ltib/rootfs/usr/include -I../../ltib/rootfs/include/python2.7 -L../../ltib/rootfs/usr/lib -L../../ltib/rootfs/lib -fPIC -I/usr/include/python2.7 -c greenlet.c -o build/temp.linux-x86_64-2.7/greenlet.o

greenlet.s: Assembler messages:

greenlet.s:832: Error: syntax error; found `(' but expected `,'

greenlet.s:832: Error: junk at end of line: `(31),1'

error: command '/opt/freescale/usr/local/gcc-4.3.74-eglibc-2.8.74-dp-2/powerpc-none-linux-gnuspe/bin/powerpc-none-linux-gnuspe-gcc' failed with exit status 1

至少我的目标是找到更多的包含库,但现在我真的被难住了!:(

还有什么建议吗?在

谢谢!在

更新2:

通过向编译器添加-save-temps标志(上面更新的错误),我能够保存并检查上面错误消息中提到的中间汇编程序代码。虚线是:#APP

# 52 "platform/switch_ppc_linux.h" 1

mr 8(31), 1

# 0 "" 2

MR(移动寄存器)操作相当简单,只接受2个参数(mr to-reg, from-reg)。我不知道带附加寄存器号的括号是怎么加上去的。FWIW,以下是上述头文件中引用的宏:#define STACK_REFPLUS 1

#ifdef SLP_EVAL

#define STACK_MAGIC 3

/* !!!!WARNING!!!! need to add "r31" in the next line if this header file

* is meant to be compiled non-dynamically!

*/

#define REGS_TO_SAVE "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", \

"r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", \

"cr2", "cr3", "cr4"

static int

slp_switch(void)

{

register int *stackref, stsizediff;

__asm__ volatile ("" : : : REGS_TO_SAVE);

__asm__ ("mr %0, 1" : "=g" (stackref) : );

{

SLP_SAVE_STATE(stackref, stsizediff);

__asm__ volatile (

"mr 11, %0\n"

"add 1, 1, 11\n"

"add 30, 30, 11\n"

: /* no outputs */

: "g" (stsizediff)

: "11"

);

SLP_RESTORE_STATE();

}

__asm__ volatile ("" : : : REGS_TO_SAVE);

return 0;

}

#endif

我开始怀疑这是否是编译器中的一个错误,因为宏看起来很简单!有什么建议吗。。。谢谢!在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值