【发布时间】:2021-03-28 19:13:17
【问题描述】:
我今天花了很大一部分时间尝试将 expresso 逻辑启发式移植到 Windows/Visual Studio 中,以便我可以将其链接为静态库。 Github Link(我昨天花了很大一部分时间试图找到一个可以在 Windows 上运行的版本,而不仅仅是一个 exe,所以我可以在放弃并尝试自己实现它之前将它链接到我的 c++ 代码)
我的大部分工作是修复所有链接错误并为其编辑 NodeJS 桥,以便我可以(稍微轻松地)将其链接为具有“minimize_from_data”函数的静态库,但是我的很多“移植”都很漂亮手足无措,我只是禁用了一些仅限 POSIX 的功能。
现在我已经编译了它,我正试图返回并确保它没有错误,然后我在一些个人项目中安全地使用它(我不完全相信我正确地移植了它)。我“禁用”的功能之一是 sys/resource 功能,它将 RLIMIT_CPU 设置为几秒钟的值,就像我可以理解的超时功能一样,如果需要太长时间,它会杀死程序。复制到这里
void set_time_limit(int seconds){
#ifndef _WIN32
struct rlimit rlp_st, *rlp = &rlp_st;
rlp->rlim_cur = seconds;
setrlimit(RLIMIT_CPU, rlp);
#endif
}
有没有办法在 windows 中替换这个功能?目前,我已将所有 expresso 源代码设置为编译为 c(/TC/Za 在 VS 中)但是因为我的最终环境将它链接到 C++ 一个 C++ 方法,我可以 extern "C" 到 c 代码中正常工作也是。 (我知道标记 c 和 c++ 是不受欢迎的)
我找到的最接近的相关问题是about stack size using strlimit
编辑:就我而言,这不是问题。为未来留下一个潜在的解决方案
【问题讨论】:
-
我不完全同意删除 c++ 标签。一个可以链接到 c 代码的 c++ 解决方案可以解决这个问题,我的最终环境是链接到几个 c++17 项目