小编ree*_*aal的帖子

WAF找不到现有的图书馆

我正在尝试为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之外,安装库还有什么特别的事情吗?

谢谢你的帮助。

c++ module shared-libraries waf node.js

3
推荐指数
1
解决办法
2822
查看次数

替换字符串迭代(out_of_range)

我编写了一个对字符串进行百分比编码的函数,如下所示:

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"时,这就是我得到的: …

c++ string iterator replace exception

0
推荐指数
1
解决办法
3133
查看次数

标签 统计

c++ ×2

exception ×1

iterator ×1

module ×1

node.js ×1

replace ×1

shared-libraries ×1

string ×1

waf ×1