[c ++] [cygwin] [gcc]通过BOOST_FILESYSTEM_DYN_LINK从DLL链接文件系统

时间:2017-10-24 14:55:16

标签: c++ gcc boost cygwin

我使用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?

2 个答案:

答案 0 :(得分:0)

没有。即使库是共享对象而不是静态库,您仍需要指定-lboost_filesystem。事实上,大多数链接器更喜欢链接共享对象而不是.a如果两者都存在(如果需要,有办法改变它)。

使用ldd查看可执行文件链接的共享库。

答案 1 :(得分:0)

只有Windows(特别是MSVC ++)支持与Boost“自动链接”。在Linux上,您要么链接到libboost_filesystem.solibboost_filesystem.a,要么在任何一种情况下都需要明确链接。