.dylib是OSX上的动态库扩展,但是当我不能/不应该使用传统的unix .so共享对象时,我从来都不清楚.
我有些问题:
存在以下库文件:
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)