cgi不会使用boost regex

时间:2015-05-26 21:12:24

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

我正在尝试编写一个包含boost regex库的cgi程序(使用cgicc)。该程序与std 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 regex,就可以了。)

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

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

1 个答案:

答案 0 :(得分:1)

您是动态链接的。

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

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

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

你也可以经常"烘烤"使用-Wl,rpath进入主程序的提示路径(请参阅例如boost libraries built with relative paths

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