Premake5在FreeBSD 10.1上无法构建。

我正在尝试从源代码在 FreeBSD 10.1 上构建 Premake5。最终,我通过删除“-dl”选项并明确地使用 gmake 进行构建来编译它。它已经构建完成,但我无法让它执行任何操作,只能输出以下错误消息。无论我如何调用它,它都会崩溃,甚至在“premake5 --help”上也是如此。

以下是该消息:

PANIC:在调用 Lua API 时出现不受保护的错误(尝试调用字符串值)

点赞
用户3011153
用户3011153

代码有很多 bug。它以 linux 是 posix 的假设开始,但显然这并不正确。它们在很多地方使用了 linuxism,因此将其转换为 posix 将是一个相当大的任务,而在此之前,在非 linux posix 系统上,它永远不会令人满意地工作。

-ldl 显然是第一个障碍。下一个是在 premake.c 中的 premake_locate_executable 函数中。在这里,他们使用了 /proc 文件系统,这是一种 linuxism,因为这在 BSD 上失败了,因此它们回退到一些 lua 方法,但它们似乎假定 lua_tostring 弹出了相应的值,而它实际上并没有这样做。由于在此函数中堆栈不平衡,因此以下 lua_call 尝试调用它们留在堆栈上的垃圾,而不是他们想要的函数。

即使在我修复了这个问题之后,他们使用 getconf _NPROCESSORS_ONLN 来获取核心数,并使用多作业构建,但实际上他们并没有验证此调用是否成功(在 Linux 和 MacOSX 之外它并不成功)。

在解决了这个问题之后,我遇到了一个问题,即他们的 makefile 不是正常的 make,而是 GNU-make,因此我不得不改用 gmake 来尝试构建。

从那时起,一切都解开了,因为 contrib 目录中的所有预制文件都没有针对 BSD 进行配置,尽管它是其中的一个合法配置目标(即它不是默认的 linux),因此这些组件没有配置。

总之,BSD 不是受支持的平台。

2015-10-13 22:53:49