cgi 不适用于 boost 正则表达式

cgi won't work with boost regex

我正在尝试编写一个包含 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 正则表达式库,因此我还必须执行以下操作:

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

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

我在 运行 时收到一些错误消息 - 本质上:"dyld: Library not loaded:" 然后 "Reason: no suitable image" 然后 \t/path/libboost_regex.dylib: stat() failed with errno=13, referer: http://localhost/test.html

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

您链接了它 - 动态。

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

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

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

您通常还可以 "bake" 使用 -Wl,rpath 直接进入主程序的提示路径(参见 boost libraries built with relative paths

我认为 install_name_tool 应该 具有相同的目的。也许它在不同的 environment/under 不同的用户中运行,这使得它停止工作。