如何在 freebsd 上安装 i386/x86 共享库?

Bit*_*nds 3 freebsd c gdb x86 shared-library

GDB 告诉我,用gcc -m32(i386 程序)编译的程序与我的共享库(i386:x86-64)不兼容。

的输出gdb

(gdb) r
Starting program: /root/format
warning: `/libexec/ld-elf.so.1': Shared library architecture i386:x86-64 is not compatible with target architecture i386.
Run Code Online (Sandbox Code Playgroud)

如果有人能解释如何解决这个问题/如何获取库,那就太好了。

Cla*_*sen 6

你没有透露任何关于你的系统的信息,所以我只会做出最有可能的猜测。您正在运行 64 位系统并且尚未安装任何 32 位库。最简单的方法是从安装程序中简单地添加它们:

 bsdinstall
Run Code Online (Sandbox Code Playgroud)

...并选择lib32。您可以随时运行安装程序(不仅仅是首次安装)。就是这样。

它的作用是lib32.txzhttp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/12.1-RELEASE/ 之类的地方获取tarball并将其解压到/usr/lib32. 请记住获取正确的版本(请查看uname -a)。如果您愿意,也可以手动执行此操作。也许您已经在/usr/freebsd-distDVD中或在 DVD 上提供了它。

如果您手动执行此操作,则可能需要告知ldconfig您有新的库。或者,如果您将它们放置在不寻常的位置,则需要更正路径。

ldconfig -32 /usr/lib32/ /usr/local/lib32/compat/
Run Code Online (Sandbox Code Playgroud)

...或者...

ldconfig -v -m -R /usr/lib32
Run Code Online (Sandbox Code Playgroud)

参见ldconfig(8)

您几乎没有说明为什么要在 64 位系统上运行 32 位二进制文​​件。如果是因为它实际上是在旧版本上制作的,那么您可能需要兼容包之一:misc/compat8xmisc/compat9xmisc/compat10xmisc/compat11x

只是为了确定:您知道您通常会在最近的系统上针对 amd64 (i386-64) 吗?i386只有 32 位,我们已经转向 64 位。这对您来说可能微不足道,但由于问题中缺乏上下文,我只想确保我们没有试图解决错误的问题。