在64位计算机上编译tcpsplice

时间:2012-06-05 14:53:44

标签: c linux rhel

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

checking build system type... Invalid configuration `x86_64-pc-linux-gnuoldld': machine `x86_64-pc' not recognized
configure: error: /bin/sh ./config.sub x86_64-pc-linux-gnuoldld failed

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

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

3 个答案:

答案 0 :(得分:2)

  

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

是。 -m32是选项。

  

是否可以更新configure脚本以支持64位Linux?如果是这样,我还会在.c文件中进行一些严格的代码更改吗?

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

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

希望我提供的小信息在某种程度上有所帮助。

答案 1 :(得分:2)

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

错误归结为config.guess的过旧版本,包创建者使用libtoolize生成该版本。要解决此问题,您需要安装libtool,然后说:

$ libtoolize --force

您会发现configure现在正在运行,因为libtoolize使用适合您系统的config.guess覆盖了bpf.h的tarball版本。

您可能遇到另一个问题,即“遗失”tcpslice.c文件。只需修改#include <net/bpf.h> 并更改此行:

#include <pcap-bpf.h>

为:

tcpslice

通过这两项更改,我得到了{{1}}来构建我的64位CentOS 5盒。

答案 2 :(得分:0)

安装以下软件包:

 $apt-get install ia32-libs.

对于rhel它的不同之处:

看看这个问题的答案:

CentOS 64 bit bad ELF interpreter