首页 文章

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

提问于
浏览
0

我使用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 回答

  • 0

    否 . 即使库是共享对象而不是静态库,您仍需要指定 -lboost_filesystem . 实际上,大多数链接器更愿意链接共享对象而不是.a(如果两者都存在)(如果需要,有更改方法) .

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

  • 0

    只有Windows(特别是MSVC)支持带有Boost的"auto-linking" . 在Linux上,您要么链接到 libboost_filesystem.solibboost_filesystem.a ,但在任何一种情况下都需要显式链接 .

相关问题