4

我最近下载了 APR 并在我的机器(Ubuntu 12.0.4)上成功构建了它。我将 /path/to/apr_file_info.h 包含到我的项目中,当我尝试编译时,我收到以下错误消息:

no decision has been made on APR_PATH_MAX for your platform

在调查头文件(apr.h)后,我发现以下指令负责:

#if defined(PATH_MAX)
#define APR_PATH_MAX       PATH_MAX
#elif defined(_POSIX_PATH_MAX)
#define APR_PATH_MAX       _POSIX_PATH_MAX
#else
#error no decision has been made on APR_PATH_MAX for your platform
#endif

(天真的?)解决方案是定义这些变量 - 但我不确定使用错误的大小是否会有任何不良影响 - 我不确定为编译器指令定义的正确大小。

为什么 ./configure 无法正确确定我的平台(Ubuntu 12.0.4),我该如何解决?

4

3 回答 3

3

在 Linux 上,PATH_MAX应在<linux/limits.h>. 在 APR 之前包含它,它应该可以解决您的问题:

#include <linux/limits.h>
#include <path/to/apr_file_info.h>

请注意,包括标准标头标<limits.h>头还应包括<linux/limits.h>或 POSIX 系统上的相关标头。

如果我没记错的话, Windows 上的等价物是MAX_PATH,在中定义。<windef.h>

于 2012-12-27T12:02:20.163 回答
0

我最近遇到了这个问题。令人惊讶的是,需要在 Linux 上使用的 APR 标头不直接包含 linux/limits.h(如果这是一个依赖项)。肯定是好的编程习惯?

于 2014-09-25T09:05:02.423 回答
0

定义符号_XOPEN_SOURCE可能会解决这个问题,例如CPPFLAGS='-D_XOPEN_SOURCE=700

请注意,有些程序不支持 CPPFLAGS,因此您必须将其添加到 CFLAGS;tomcat-native 就是一个例子:编译它时你可以编辑文件native/scripts/build/rules.mk

- COMPILE      = $(CC) $(CFLAGS)
+ COMPILE      = $(CC) $(CFLAGS) $(CPPFLAGS)
于 2018-05-29T15:44:19.833 回答