在freebsd上构建32位libcurl的正确方法是什么?

在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

我需要构建一个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 -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,但我不知道怎么做,现在也懒得去查。