交叉编译pycurl-7.19.5.1

cross-compiling pycurl-7.19.5.1

我正在尝试交叉编译最新的 pycurl 包,但该问题也可能适用于早期版本。我的谷歌搜索显示这个包不是很适合交叉编译。

首先,我使用 buildroot 和 buildroot 工具链(uclibc 最新版本)进行交叉编译。

该包使用 gentargets 构建,因为它不是为自动目标编写的。而构建命令只是调用 setup.py:

define PYCURL_BUILD_CMDS 
(cd $(@D);\
 CC="$(TARGET_CC)"\
 LD="$(TARGET_LD)"\
$(HOST_DIR)/usr/bin/python setup.py build\
--curl-config=$(STAGING_DIR)/usr/bin/curl-config)     
endef

问题是在构建目标文件后,构建脚本决定使用目标编译器的主机编译器:

构建目标文件:

/media/N/svn_main/buildroot/output/host/usr/bin/ccache /media/N/svn_main/buildroot/output/host/usr/bin/x86_64-unknown-linux-uclibc-gcc -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -I/media/N/svn_main/buildroot/output/host/usr/x86_64-unknown-linux-uclibc/sysroot/usr/include - I/media/N/svn_main/buildroot/output/host/usr/x86_64-unknown-linux-uclibc/sysroot/lib -fPIC -DPYCURL_VERSION="7.19.5.1" -DHAVE_CURL_OPENSSL=1 -DHAVE_CURL_SSL=1 -I/media/N/svn_main/buildroot/output/host/usr/include/python2.7 -c src/stringcompat.c - o build/temp.linux-x86_64-2.7/src/stringcompat.o

链接库: /media/N/svn_main/buildroot/output/host/usr/bin/ccache /usr/bin/gcc -pthread -shared -L/media/N/svn_main/buildroot/output/host/usr/x86_64-unknown-linux-uclibc/sysroot/ -L/media/N/svn_main/buildroot/output/host/usr/x86_64-unknown-linux-uclibc/sysroot/lib --sysroot=/media/N/svn_main/buildroot/output/host/usr/x86_64-unknown-linux-uclibc/sysroot build/temp.linux-x86_64-2.7/src/docstrings.o build/temp.linux-x86_64-2.7/src/easy.o build/temp.linux-x86_64-2.7/src/module.o build/temp.linux-x86_64-2.7/src/multi.o build/temp.linux-x86_64-2.7/[=57= .o build/temp.linux-x86_64-2.7/src/pythoncompat.o build/temp.linux-x86_64-2.7/src/share.o build/temp .linux-x86_64-2.7/src/stringcompat.o build/temp.linux-x86_64-2.7/src/threadsupport.o -L/media/N/svn_main/buildroot/output/host/usr/x86_64-unknown-linux-uclibc/sysroot/usr/lib -lcurl - lcrypto -o build/lib.linux-x86_64-2.7/pycurl.so

如果您曾与我们交叉编译过此包或对我面临的问题有任何想法,我将不胜感激。

您应该使用 python-package 基础设施在 Buildroot 中打包 pycurl。它将使用 pycurl 源中提供的基于 distutils 的 setup.py。

我最终通过设置 LDSHARED 变量解决了问题:

LDSHARED="$(TARGET_CC) -pthread -shared"

显然 distutils 使用不同的工具 link 最终的共享对象,由 LDSHARED 指定。