CGI 不适用于 Boost 正则表达式
cgi won't work with boost regex
我正在尝试编写一个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
应该服务于相同的目的。也许它运行在不同的环境/不同的用户下,这使得它停止工作
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 为什么 Boost:正则表达式没有按预期找到所有结果?
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 使用 boost::regex (c++) 比较两个正则表达式
- 我的 Boost 正则表达式与任何内容都不匹配
- 使用boost正则表达式时出现shared_ptr错误
- Boost正则表达式:链接时未定义的引用
- 如何使用perl样式内存正则表达式与Boost库匹配
- 如何获得与 C++11 或 Boost 匹配的正则表达式长度
- 递归匹配与 boost 正则表达式库
- 提高Boost正则表达式的速度或在C++中使用PCRE
- boost正则表达式中的命名捕获/组列表
- 使用Boost替换正则表达式
- 关于正则表达式与Boost的逻辑AND和OR匹配的说明
- 将 C++11 正则表达式与 gcc 4.8.2 一起使用时会出现奇怪的结果(但适用于 Boost 正则表达式)
- 使用 Boost 的 C++ 中的正则表达式
- Boost::qt Creator中的正则表达式
- 如何使 Boost.Spirit.Lex 令牌值成为匹配序列的子字符串(最好通过正则表达式匹配组)
- Boost.Test 使用正则表达式测试文件内容
- 使用 Boost::regex 进行正则表达式组匹配