在 64 位机器上编译 tcpsplice

Posted

技术标签:

【中文标题】在 64 位机器上编译 tcpsplice【英文标题】:Compiling tcpsplice on a 64-bit machine 【发布时间】:2012-06-09 14:34:09 【问题描述】:

我正在尝试编译一个名为tcpslice 的小实用程序。这是典型的 GNU C 应用程序。当我运行./configure 时,输出如下:

检查构建系统类型...无效配置“x86_64-pc-linux-gnuoldld”:机器“x86_64-pc”无法识别 配置:错误:/bin/sh ./config.sub x86_64-pc-linux-gnuoldld 失败

它似乎不支持编译为 64 位 Linux 应用程序。所以我有几个问题:

    是否可以设置一些标志来将应用程序编译为 32 位并能够在我的 64 位操作系统上运行它? 是否可以更新配置脚本以支持 64 位 Linux?如果是这样,我是否也会在 .c 文件中进行一些重要的代码更改? 我注意到我网络上的一台 64 位 RHEL6 机器安装了该实用程序,并以相同的版本号 (1.2a3) 运行。我可以以某种方式下载用于构建它的源代码吗?如有必要,我可以访问 RHN。

【问题讨论】:

安装名为“libc32”和/或“gcc32”或类似名称的软件包。 你不能从通过 centos rpm repo 获得的 tcpdump rpm 包中获取 tcpslice 程序吗?不确定您运行的是哪个版本的 centos,但 rpm.pbone.net/index.php3/stat/4/idpl/17839287/dir/centos_5/com/… 适用于 centos 5,并且您可以使用 src rpm 进行编译。 这个应该移到unix.stackexchange.com 【参考方案1】:

是否可以设置一些标志来将应用程序编译为 32 位并能够在我的 64 位操作系统上运行它?

是的。 -m32 是选项。

是否可以更新配置脚本以支持 64 位 Linux?如果是这样,我是否也会在 .c 文件中进行一些重大的代码更改?

您必须进行一些代码更改才能使纯 32 位应用程序在 64 位上运行。这是一个link,它谈论将代码从 32 位移植到 64 位。

对不起,我不知道你第三个问题的答案。

希望我提供的小信息能在某些方面有所帮助。

【讨论】:

感谢您的帮助。如何告诉./configure 脚本使用-m32? ./configure -m32 作为一个无法识别的选项失败,它看起来像一个 gcc 标志。 ./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 但是,正如我在回答中所说,我认为这并不能真正解决您的问题。【参考方案2】:

安装以下软件包:

 $apt-get install ia32-libs.

对于 rhel 它的不同:

看看这个问题的答案:

CentOS 64 bit bad ELF interpreter

【讨论】:

我正在运行 CentOS 并安装了 glibc.i686。 ./configure 仍然以同样的方式失败。【参考方案3】:

您误解了configure 脚本告诉您的内容。该解决方案与 CPU 位数无关。

错误归结为config.guess 的版本太旧,包创建者使用libtoolize 生成该版本。要修复它,您需要安装 libtool,然后说:

$ libtoolize --force

您会发现configure 现在运行了,因为libtoolize 用适合您系统的版本覆盖了config.guess 的压缩包版本。

您可能会遇到另一个问题,“丢失”bpf.h 文件。只需编辑 tcpslice.c 并更改此行:

#include <net/bpf.h>

到:

#include <pcap-bpf.h>

通过这两项更改,我得到了tcpslice 来构建我的 64 位 CentOS 5 机器。

【讨论】:

以上是关于在 64 位机器上编译 tcpsplice的主要内容,如果未能解决你的问题,请参考以下文章

你能在 64 位机器上编译 32 位 Apache DSO(Oracle HTTP 服务器)吗?

在 32 位和 64 位上编译,但校验和不同

如何在 64 位 RHEL 上编译 32 位应用程序?

如何在 64 位 osx 上编译 gcc 32 位应用程序

在 64 位 Arm 上编译和安装 Chez 方案?

如何在 Windows 上编译 64 位版本的 ffmpeg?