c++ - cgi 不适用于 boost 正则表达式

标签 c++ regex c++11 boost cgi

我正在尝试编写一个包含 boost regex 库的 cgi 程序(使用 cgicc)。该程序与 std regex 完美配合,但我正在尝试更改以 boost regex 以测试性能差异。

如果我创建一个不使用 cgicc 或通过浏览器运行的离线版本,该程序也能完美运行。当我编译这个程序时,我使用以下命令行:

c++ -std=c++11 resourcelocator.cpp -I/path/include -I/path/boost_1_57_0 -L/path/src -L/path/lib -lcgicc -lgmp -lcurl -lcurlcpp - lboost_regex -o resourcelocator.cgi

生成的可执行文件总是在 boost regex 库的错误位置,因此我还必须执行以下操作:

install_name_tool -change libboost_regex.dylib/path/libboost_regex.dylib resourcelocator.cgi

之后,离线版本就可以完美运行了。但是,如果我尝试编写一个与 cgi 脚本几乎相同的程序并从浏览器运行它,我每次都会收到 500 错误。我尝试将脚本缩减为只打印标题,但它仍然返回 500 错误。如果我在编译程序时不链接 -lboost_regex,程序将再次运行(当然,只要我取出 boost 正则表达式)。

我在运行时收到一些错误消息 - 本质上是:“dyld:未加载库:”然后是“原因:没有合适的图像”然后是 \\t/path/libboost_regex.dylib:stat() 失败errno=13,referer:http://localhost/test.html

为什么链接库会导致 cgi 失败?我有什么办法可以在 cgi 程序中使用这个库吗?

最佳答案

你链接它 - 动态。

这意味着,在运行时,动态链接器必须找到动态库来满足符号(dll、so 或 dylib)。

您系统的运行时链接器无法找到二进制文件。

我不是 Mac 用户,但在 Linux 上你会设置 LD_LIBRARY_PATH(我想我也记得在 OSX 上看到过这个)。某些 UNIX-en 拼写为 LIB_PATH。

您通常还可以使用 -Wl,rpath 将提示路径“烘焙”到主程序中(参见例如 boost libraries built with relative paths)

我认为 install_name_tool 应该 用于相同的目的。也许它在不同的环境/不同的用户下运行,这使得它停止工作。

关于c++ - cgi 不适用于 boost 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30468998/

相关文章:

c++ - 为什么在这个 ssl 写入过程中 char 数组的第一个字母被截断了?

regex - 优雅的正则表达式匹配所有标点符号但不匹配 "'“在 emacs Lisp 中?

c++ - 命名空间中所有类的类模板特化

c++ - math.h 宏冲突

c++ - 在 Eigen 中使用 unaryExpr 进行逐元素运算

c++ - 如何删除这个二维指针数组?制作析构函数

c# - 正则表达式基于组的不同替换?

sql - 如何在postgres lazy中制作正则表达式

c++ - 如何在编译时确认自动推断类型的假设? (即 static_assert 样式

c++ - 当我可以将对象的实际类型指定为模板参数时内联虚函数