我正在尝试为node.js编写C ++模块。节点正在使用waf作为构建器。
我想检查配置,如果库“ sigar”存在。我正在尝试这样做:
def configure(conf):
conf.check_cxx(lib='sigar')
Run Code Online (Sandbox Code Playgroud)
当我运行“ node-waf configure”时,收到以下消息:
Checking for library sigar : not found
Run Code Online (Sandbox Code Playgroud)
但是libsigar.so存在:
# whereis libsigar
libsigar: /lib64/libsigar.so
Run Code Online (Sandbox Code Playgroud)
安装“ libsigar”库后,我还运行了ldconfig。节点模块可以编译,链接并正常工作。其他库,例如libm,libboost_system等,可以在configure上找到。
有人可以告诉我我在做什么错吗?除了仅将* .so复制到库路径并运行ldconfig之外,安装库还有什么特别的事情吗?
谢谢你的帮助。
我编写了一个对字符串进行百分比编码的函数,如下所示:
string percent_encode(string str)
{
string reserved =
// gen-delims
":/?#[]@"
// sub-delims
"!$&'()*+,;="
;
for(string::iterator i = str.begin(); i < str.end(); i++) {
int c = *i;
// replaces reserved, unreserved non-ascii and space characters.
if(c > 127 || c == 32 || reserved.find(*i) != string::npos) {
std::stringstream ss;
ss << std::hex << c;
str.replace(i, i + 1, "%" + ss.str());
}
}
return str;
}
Run Code Online (Sandbox Code Playgroud)
当我为"a&b"之类的字符串调用此函数时,会抛出out_of_range异常:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::replace
Run Code Online (Sandbox Code Playgroud)
我用调试器跟踪了这个异常,看到替换效果很好,但它以某种方式迭代到end()之外;
当我看到迭代器"i"时,这就是我得到的: …