在freebsd上构建32位libcurl的正确方法是什么?
我需要构建一个32位libcurl.so等freebsd 如果我这样运行/配置:在freebsd上构建32位libcurl的正确方法是什么?,libcurl,freebsd,32-bit,Libcurl,Freebsd,32 Bit,我需要构建一个32位libcurl.so等freebsd 如果我这样运行/配置: CFLAGS="-m32" CPPFLAGS="-m32" LDFLAGS="-L/usr/lib32 -m32" ./configure --prefix=/usr/home/debby/libcurl2 我在config.log中发现以下错误: configure:4373: checking whether the C compiler works configure:4395: gcc -m32 -m32
CFLAGS="-m32" CPPFLAGS="-m32" LDFLAGS="-L/usr/lib32 -m32" ./configure --prefix=/usr/home/debby/libcurl2
我在config.log中发现以下错误:
configure:4373: checking whether the C compiler works
configure:4395: gcc -m32 -m32 -L/usr/lib32 -m32 conftest.c >&5
/usr/local/bin/ld: i386:x86-64 architecture of input file `/usr/lib/crt1.o' is incompatible with i386 output
/usr/local/bin/ld: i386:x86-64 architecture of input file `/usr/lib/crti.o' is incompatible with i386 output
/usr/local/bin/ld: i386:x86-64 architecture of input file `/usr/local/lib/gcc6/gcc/x86_64-portbld-freebsd11.1/6.4.0/crtbegin.o' is incompatible with i386 output
/usr/local/bin/ld: i386:x86-64 architecture of input file `/usr/local/lib/gcc6/gcc/x86_64-portbld-freebsd11.1/6.4.0/crtend.o' is incompatible with i386 output
/usr/local/bin/ld: i386:x86-64 architecture of input file `/usr/lib/crtn.o' is incompatible with i386 output
我这样做对吗?我应该改为在./configure命令行上指定--build和--host,如果是,则指定哪些值
=========
更新
使用@Wodin建议的第一个链接,我运行了如下配置:
export CFLAGS="-m32 -march=i686 -mmmx -msse -msse2 -mfancy-math-387 -DCOMPAT_32BIT"
#export CPPFLAGS="-m32 -march=i686 -mmx -msse -msse2 -DCOMPAT_32BIT"
export LDFLAGS="-m32 -L/usr/lib32 -B/usr/lib32"
./configure --prefix=/usr/home/debby/libcurl
make-then失败,因为我没有32位运行库
[debby@GServerBuild ~/curl-7.60.0]$ make install
Making install in lib
CCLD libcurl.la
/usr/local/bin/ld: i386:x86-64 architecture of input file `/usr/lib/crti.o' is incompatible with i386 output
/usr/local/bin/ld: i386:x86-64 architecture of input file `/usr/local/lib/gcc6/gcc/x86_64-portbld-freebsd11.1/6.4.0/crtbeginS.o' is incompatible with i386 output
/usr/local/bin/ld: i386:x86-64 architecture of input file `/usr/local/lib/gcc6/gcc/x86_64-portbld-freebsd11.1/6.4.0/crtendS.o' is incompatible with i386 output
/usr/local/bin/ld: i386:x86-64 architecture of input file `/usr/lib/crtn.o' is incompatible with i386 output
collect2: error: ld returned 1 exit status
*** Error code 1
根据提供的第二个链接,我似乎需要从空的/usr/src构建这些库
我正在尝试使用fetch-o/tmp获取srcftp://ftp.freebsd.org/pub/
uname-s/releases/
uname-m/
uname-r | cut-d'-'-f1,2/src.txz
,如下所述:
并将在此处更新您正在使用的/usr/local/bin/ld,它是来自端口的binutils。可能没有32位支持。尝试设置LD
LD=/usr/bin/ld CFLAGS="-m32" CPPFLAGS="-m32" LDFLAGS="-L/usr/lib32" ./configure --libdir=/usr/local/lib32
我还用readelf检查了文件
readelf -h lib/.libs/libcurl.so
ELF标头:
魔术:7f 45 4c 46 01 01 01 09 00 00
类别:ELF32
数据:2的补码,小尾端
版本:1(当前版本)
OS/ABI:FreeBSD
最好的方法是在ports和set中复制Makefile
PKGNAMEPREFIX="lib32-"
CFLAGS+="-m32"
CPPFLAGs+="-m32"
LDFLAGS+="-L/usr/lib32"
CONFIGURE_ARGS+="--libdir="${LOCALBASE}/lib32"
这可能会有帮助:-如果这不起作用,也许可以试试chroot:谢谢@Wodin。第一个环节起了作用。I./configure现在运行。链接失败,因为我没有32位crt对象。出于兴趣,我将更新我的问题,为什么需要32位版本的libcurl?另请参见:这些说明适用于在64位系统上设置32位版本。我刚刚测试过。我没拿钥匙地图。它抱怨在监狱配置中使用rc.conf,但仍然有效。显然,这些天你应该使用/etc/jail.conf,但我不知道怎么做,现在也懒得去查。