在 Redhat 上编译 SOCAT
Compiling SOCAT on Redhat
我正在尝试安装 SOCAT and I am quite lite on C++. So following the instructions HERE 我能够下载 1.7.3.1 的最新稳定版本,我通过了 ./configure
,但是当我进入 ./make
我收到以下错误:
nestlex.c:14:7: error: unknown type name ‘ptrdiff_t’
ptrdiff_t *len,
^
nestlex.c: In function ‘nestlex’:
nestlex.c:48:7: warning: implicit declaration of function ‘_nestlex’ [-Wimplicit-function-declaration]
_nestlex(addr, token, (ptrdiff_t *)len, ends, hquotes, squotes, nests,
^
nestlex.c:48:30: error: ‘ptrdiff_t’ undeclared (first use in this function)
_nestlex(addr, token, (ptrdiff_t *)len, ends, hquotes, squotes, nests,
^
nestlex.c:48:30: note: each undeclared identifier is reported only once for each function it appears in
nestlex.c:48:41: error: expected expression before ‘)’ token
_nestlex(addr, token, (ptrdiff_t *)len, ends, hquotes, squotes, nests,
^
nestlex.c: At top level:
nestlex.c:54:7: error: unknown type name ‘ptrdiff_t’
ptrdiff_t *len,
^
nestlex.c: In function ‘nestlex’:
nestlex.c:50:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
make: *** [nestlex.o] Error 1
系统信息:
cat system-release
Red Hat Enterprise Linux Server release 7.2 (Maipo)
rpm -qa |grep gcc
libgcc-4.8.5-4.el7.x86_64
gcc-4.8.5-4.el7.x86_64
rpm -qa |grep glibc
glibc-common-2.17-106.el7_2.6.x86_64
glibc-2.17-106.el7_2.6.x86_64
glibc-devel-2.17-106.el7_2.6.x86_64
glibc-headers-2.17-106.el7_2.6.x86_64
rpm -qa |grep gd
gdisk-0.8.6-5.el7.x86_64
gd-2.0.35-26.el7.x86_64
gdbm-1.10-8.el7.x86_64
我不确定从这里去哪里,因为我对必须从源代码安装还很陌生。我发现有几篇文章将问题描述为未安装 headers 的正确版本。如果有人能指出正确的方向,我将不胜感激。
提前致谢。
未知类型在 header 文件 stddef.h
中定义。如果编译报错的文件中没有#include <stddef.h>
,则将其添加到顶部某处。由于 header 包含在本质上是可传递的,因此当必要的包含存在于另一个仍然包含的 header 中时,有时会发生这些类型的错误,但由于某种原因丢弃了包含的较新版本。
例如,通常可以通过搜索 here 找到常见类型的定义位置。
实际上,当使用 socat.spec 默认配置时,socat 构建没有错误:请参阅 socat-1.7.3.1-1.fc25.src.rpm → →
./configure \
--enable-help --enable-stdio \
--enable-fdnum --enable-file --enable-creat \
--enable-gopen --enable-pipe --enable-termios \
--enable-unix --enable-ip4 --enable-ip6 \
--enable-rawip --enable-tcp --enable-udp \
--enable-listen --enable-proxy --enable-exec \
--enable-system --enable-pty --enable-readline \
--enable-openssl --enable-sycls --enable-filan \
--enable-retry --enable-libwrap --enable-fips
您还可以使用 $ rpmbuild -bb socat.spec
从 socat-1.7.3.1-1.fc25.src.rpm 创建 socat-1.7.3.1-1.el7.x86_64.rpm
( http://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/source/tree/Packages/s/socat-1.7.3.1-1.fc25.src.rpm ).
我正在尝试安装 SOCAT and I am quite lite on C++. So following the instructions HERE 我能够下载 1.7.3.1 的最新稳定版本,我通过了 ./configure
,但是当我进入 ./make
我收到以下错误:
nestlex.c:14:7: error: unknown type name ‘ptrdiff_t’
ptrdiff_t *len,
^
nestlex.c: In function ‘nestlex’:
nestlex.c:48:7: warning: implicit declaration of function ‘_nestlex’ [-Wimplicit-function-declaration]
_nestlex(addr, token, (ptrdiff_t *)len, ends, hquotes, squotes, nests,
^
nestlex.c:48:30: error: ‘ptrdiff_t’ undeclared (first use in this function)
_nestlex(addr, token, (ptrdiff_t *)len, ends, hquotes, squotes, nests,
^
nestlex.c:48:30: note: each undeclared identifier is reported only once for each function it appears in
nestlex.c:48:41: error: expected expression before ‘)’ token
_nestlex(addr, token, (ptrdiff_t *)len, ends, hquotes, squotes, nests,
^
nestlex.c: At top level:
nestlex.c:54:7: error: unknown type name ‘ptrdiff_t’
ptrdiff_t *len,
^
nestlex.c: In function ‘nestlex’:
nestlex.c:50:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
make: *** [nestlex.o] Error 1
系统信息:
cat system-release
Red Hat Enterprise Linux Server release 7.2 (Maipo)
rpm -qa |grep gcc
libgcc-4.8.5-4.el7.x86_64
gcc-4.8.5-4.el7.x86_64
rpm -qa |grep glibc
glibc-common-2.17-106.el7_2.6.x86_64
glibc-2.17-106.el7_2.6.x86_64
glibc-devel-2.17-106.el7_2.6.x86_64
glibc-headers-2.17-106.el7_2.6.x86_64
rpm -qa |grep gd
gdisk-0.8.6-5.el7.x86_64
gd-2.0.35-26.el7.x86_64
gdbm-1.10-8.el7.x86_64
我不确定从这里去哪里,因为我对必须从源代码安装还很陌生。我发现有几篇文章将问题描述为未安装 headers 的正确版本。如果有人能指出正确的方向,我将不胜感激。
提前致谢。
未知类型在 header 文件 stddef.h
中定义。如果编译报错的文件中没有#include <stddef.h>
,则将其添加到顶部某处。由于 header 包含在本质上是可传递的,因此当必要的包含存在于另一个仍然包含的 header 中时,有时会发生这些类型的错误,但由于某种原因丢弃了包含的较新版本。
例如,通常可以通过搜索 here 找到常见类型的定义位置。
实际上,当使用 socat.spec 默认配置时,socat 构建没有错误:请参阅 socat-1.7.3.1-1.fc25.src.rpm → →
./configure \
--enable-help --enable-stdio \
--enable-fdnum --enable-file --enable-creat \
--enable-gopen --enable-pipe --enable-termios \
--enable-unix --enable-ip4 --enable-ip6 \
--enable-rawip --enable-tcp --enable-udp \
--enable-listen --enable-proxy --enable-exec \
--enable-system --enable-pty --enable-readline \
--enable-openssl --enable-sycls --enable-filan \
--enable-retry --enable-libwrap --enable-fips
您还可以使用 $ rpmbuild -bb socat.spec
从 socat-1.7.3.1-1.fc25.src.rpm 创建 socat-1.7.3.1-1.el7.x86_64.rpm
( http://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/source/tree/Packages/s/socat-1.7.3.1-1.fc25.src.rpm ).