在 64 位机器上编译 tcpsplice
Posted
技术标签:
【中文标题】在 64 位机器上编译 tcpsplice【英文标题】:Compiling tcpsplice on a 64-bit machine 【发布时间】:2012-06-09 14:34:09 【问题描述】:我正在尝试编译一个名为tcpslice 的小实用程序。这是典型的 GNU C 应用程序。当我运行./configure
时,输出如下:
它似乎不支持编译为 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的主要内容,如果未能解决你的问题,请参考以下文章