我使用Libboost文件系统来检查文件是否存在,这是一段非常简单的代码 . 另外我想使用libboost作为dll库,而不是静态库 . 在这里你有我几分钟前写的东西:
void Hex2bin::convert(string filename, vector<uint8_t>* decodedBytes) {
const path fname(filename); // from boost::filesystem
if (exists(fname)) {
;
}
else {
throw new EFileDoesntExist;
}
}
不幸的是,当我从链接器设置中删除-lboost_filesystem并在Eclipse配置中全局添加宏BOOST_FILESYSTEM_DYN_LINK时,我只得到如下链接器错误:
/usr/include/boost/filesystem/operations.hpp:446:未定义的引用`boost :: filesystem :: detail :: status(boost :: filesystem :: path const&,boost :: system :: error_code *)'
源文件编译没有任何警告 . 当我恢复到-lboost_filesystem时,一切正常,但我认为然后库静态链接到EXE文件 . 有谁知道出了什么问题?或者我可能错误地理解如何链接libboost?
2 回答
否 . 即使库是共享对象而不是静态库,您仍需要指定
-lboost_filesystem
. 实际上,大多数链接器更愿意链接共享对象而不是.a(如果两者都存在)(如果需要,有更改方法) .使用
ldd
查看可执行文件链接的共享库 .只有Windows(特别是MSVC)支持带有Boost的"auto-linking" . 在Linux上,您要么链接到
libboost_filesystem.so
或libboost_filesystem.a
,但在任何一种情况下都需要显式链接 .