相关疑难解决方法(0)

osx上的.so和.dylib有什么区别?

.dylib是OSX上的动态库扩展,但是当我不能/不应该使用传统的unix .so共享对象时,我从来都不清楚.

我有些问题:

  • 在概念层面,.so和.dylib之间的主要区别是什么?
  • 什么时候可以/我应该使用一个而不是另一个?
  • 编译技巧和提示(例如,替换gcc -shared -fPIC,因为这不适用于osx)

c c++ unix macos

196
推荐指数
4
解决办法
9万
查看次数

链接到boost :: program_options无法正常工作

存在以下库文件:

cls /usr/local/Cellar/boost/1.51.0/lib $ ls libboost_program*
libboost_program_options-mt.a       libboost_program_options-mt.dylib
Run Code Online (Sandbox Code Playgroud)

我包括以下标题#include <boost/program_options.hpp>:

cls /usr/local/Cellar/boost/1.51.0/include $ ls boost/program_options.hpp
boost/program_options.hpp
Run Code Online (Sandbox Code Playgroud)

我尝试链接库

-lboost_program_options-mt
-L/usr/local/Cellar/boost/1.51.0/lib
Run Code Online (Sandbox Code Playgroud)

(我假设库的名称是从文件名减去"lib"和文件结尾派生的.如果我尝试名字boost_program_options(没有-mt),我得到ld: library not found for -lboost_program_options)

这是我使用库的主要功能:

#include <boost/program_options.hpp>
#include <iostream

int main(int argc, char **argv) {

    namespace opts = boost::program_options;

    opts::options_description desc("EnsembleClustering options");
    desc.add_options()
            ("hello", "produce greeting");

    opts::variables_map vmap;
    opts::store(opts::parse_command_line(argc, argv, desc), vmap);
    opts::notify(vmap);

    if (vmap.count("hello")) {
        std::cout << "Hello World" << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这个设置会给我一个symbol(s) not found错误?

make all …
Run Code Online (Sandbox Code Playgroud)

c++ linker boost boost-program-options

6
推荐指数
1
解决办法
4988
查看次数

标签 统计

c++ ×2

boost ×1

boost-program-options ×1

c ×1

linker ×1

macos ×1

unix ×1