我使用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&amp;,boost :: system :: error_code *)&#39;
源文件编译时没有任何警告。当我恢复到-lboost_filesystem时,一切正常,但我认为然后库静态链接到EXE文件。有谁知道出了什么问题?或者我可能错误地理解如何链接libboost?
答案 0 :(得分:0)
没有。即使库是共享对象而不是静态库,您仍需要指定-lboost_filesystem
。事实上,大多数链接器更喜欢链接共享对象而不是.a如果两者都存在(如果需要,有办法改变它)。
使用ldd
查看可执行文件链接的共享库。
答案 1 :(得分:0)
只有Windows(特别是MSVC ++)支持与Boost“自动链接”。在Linux上,您要么链接到libboost_filesystem.so
或libboost_filesystem.a
,要么在任何一种情况下都需要明确链接。