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.
如果有人能解释如何解决这个问题/如何获取库,那就太好了。
答案1
您没有透露有关您的系统的任何信息,因此我只会做出最有可能的猜测。您运行的是 64 位系统,尚未安装任何 32 位库。最简单的方法是从安装程序中添加它们:
bsdinstall
...然后选择lib32
.您可以随时运行安装程序(不仅仅是第一次安装)。就是这样。
它的作用是lib32.txz
从类似的地方获取 tarballhttp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/12.1-RELEASE/并将其解压到/usr/lib32
.请记住获取正确的版本(使用 进行检查uname -a
)。如果您愿意,也可以手动执行此操作。也许您已经在/usr/freebsd-dist
DVD 中找到了它。
如果您手动执行此操作,那么您可能需要告知ldconfig
您有新的库。或者,如果您将它们放置在不寻常的位置,则需要更正路径。
ldconfig -32 /usr/lib32/ /usr/local/lib32/compat/
...或者...
ldconfig -v -m -R /usr/lib32
您很少说明为什么尝试在 64 位系统上运行 32 位二进制文件。如果是因为它实际上是在旧版本上制作的,那么您可能想要兼容包之一:杂项/compat8x,杂项/compat9x,杂项/兼容10x,杂项/compat11x
只是为了确定:您知道您通常会在最新的系统上以 amd64 (i386-64) 为目标吗?i386
只有 32 位,我们已经转向 64 位。这对您来说可能是微不足道的,但由于问题缺乏上下文,我只是想确保我们没有试图解决错误的问题。