小编v88*_*891的帖子

如何在构建时修改.dylib的安装名称

我正在为Mac OS X(10.7.1)上的C++ 构建google-gflags命令行标记库.构建过程如下:

$ ./configure --prefix=output
$ make
$ make install 
Run Code Online (Sandbox Code Playgroud)

我想在构建时更改生成的共享库的安装名称,install_name_tool之后不再使用.

默认情况下,生成的共享库的安装名称libgflags.dylib是输出路径:

$ otool -L ./output/libgflags.dylib
$ ./output/libgflags.dylib:
    /tmp/gflags-1.5/output/lib/libgflags.0.dylib (compatibility version 2.0.0, current version 2.0.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0) 
Run Code Online (Sandbox Code Playgroud)

手册页ld(1)有一个-install_name选项,可用于在链接时更改动态库的安装名称.

例如,使用虚拟程序:

$ g++ -dynamiclib temp.cc -install_name /tmp/temp.dylib -o temp.dylib
$ otool -L temp.dylib 
temp.dylib:
    /tmp/temp.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version …
Run Code Online (Sandbox Code Playgroud)

macos autoconf shared-libraries install-name-tool

7
推荐指数
2
解决办法
7747
查看次数

使用BOOST_FOREACH时,如何测试向量中的最后一个元素?

我有一个迭代的矢量.向量的最后一个元素是特例,我想分别测试它.例如,我可以这样做:

for (iterator = vector.begin(); iterator != vector.end(); ++iterator) {
    if ((iterator + 1) == (vector.end())) {
        ...
    } else {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我想用BOOST_FOREACH宏替换迭代器.可以对最终元素进行类似的测试吗?

c++ boost boost-foreach

5
推荐指数
2
解决办法
1352
查看次数