CGI 不适用于 Boost 正则表达式

cgi won't work with boost regex

本文关键字:正则表达式 Boost 适用于 不适用 CGI      更新时间:2023-10-16

我正在尝试编写一个cgi程序(使用cgic),其中包含boost正则表达式库。该程序可以完美地使用std regex,但我正在尝试更改为boost regex以测试性能差异。

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

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() failed with 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库)

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