我刚刚从下载了协议缓冲区(protobuf)2.5.0这里。然后我尝试在 Solaris 8 (SunOS ms-sparc8 5.8) 上安装它。当我尝试运行 make 时,出现此错误。
In file included from google/protobuf/compiler/command_line_interface.h:41,
from google/protobuf/compiler/main.cc:33:
google/protobuf/stubs/common.h:48:20: stdint.h: No such file or directory
我的 Solaris 没有stdint.h
.所以我试着把一个便携式的stdint.h
从这里并把它放进去/usr/include/
。输入后stdint.h
,我尝试再次运行 make 但失败了。然后我尝试查看导致错误的文件(command_line_interface.h 和 main.cc)。我假设command_line_interface.h
andmain.cc
使用common.h
头文件,问题是由 common.h 引起的。当我查看common.h
代码时,我发现了这个初始化:
#if defined(__osf__)
// Tru64 lacks stdint.h, but has inttypes.h which defines a superset of
// what stdint.h would define.
#include <inttypes.h>
#elif !defined(_MSC_VER)
#include <stdint.h>
#endif
我尝试删除#include <stdint.h>
并!define(_MSC_VER)
替换它,<inttypes.h>
希望它只能被迫使用inttypes.h
.然后又失败了。所以我的下一个猜测是因为__ost__
没有定义。这代表什么?当我查看 make 日志时,它让我更加困惑。如果您需要查看 make 日志。我已经粘贴了这里。我该如何解决这个问题?有人在安装protobuf时遇到同样的问题吗?
答案1
你很幸运,stdint.h 并不是一个非常复杂的头文件,你可以简单地生成一个。
有以下几种可能性:
- 在 Solaris 8 上,您可以使用
<sys/int_types.h>
代替<stdint.h>
.您可以在源代码中更改此设置,也可以/usr/include/stdint.h
使用单行内容“#include <sys/int_types.h>
”创建自己的文件。 - 您可以从另一个系统导入它。例如,
stdint.h
在 cygwin64 中看起来非常简单且可移植。 - 或者你也可以从 glibc 得到这个,尽管没有真正的 beautyfil(glibc 往往使一切变得复杂 10 倍,因为它需要)。
代替你,我从(1)开始,如果出现问题,我提出了一个新问题。