链接/编译使用 boost/filesystem.hpp 的程序

Linking/compiling a program that uses boost/filesystem.hpp

本文关键字:hpp 程序 filesystem 编译 链接 boost      更新时间:2023-10-16

我正在尝试在我正在编写的某些代码中使用boost/文件系统库。我似乎很难编译它。我正在运行 Debian Wheezy,并且有 boost 版本 1.49(如果您使用 apt-get 安装,就会出现这种情况)。我正在尝试编译文档提供的示例

#include <iostream>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
int main(int argc, char* argv[])
{
  if (argc < 2)
  {
    std::cout << "Usage: tut1 pathn";
    return 1;
  }
  std::cout << argv[1] << " " << file_size(argv[1]) << 'n';
  return 0;
}

我使用以下命令:

g++ temp.cc -o temp /usr/lib/libboost_filesystem.a

我收到许多错误,例如:

/usr/lib/libboost_filesystem.a(operations.o): In function `boost::filesystem3::detail::dir_itr_close(void*&, void*&)':
(.text+0x4d): undefined reference to `boost::system::system_category()'
/usr/lib/libboost_filesystem.a(operations.o): In function `boost::filesystem3::detail::directory_iterator_increment(boost::filesystem3::directory_iterator&, boost::system::error_code*)':
(.text+0xe3): undefined reference to `boost::system::system_category()'

这可能是一些链接错误,对吧?关于我如何解决它的任何想法?

更新#1:我尝试使用 -lboost_filesyste 和 -L/usr/lib 运行它。它给了我以下错误:

/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'

您没有正确链接库。此外,正如其他人提到的,boost_filesystem也需要boost_system图书馆。用:

g++ temp.cc -o temp -lboost_system -lboost_filesystem

命令行参数-l foo链接libfoo.a库。如果静态库不在默认库位置,请使用命令 -L /custom/library/dir 。但我相信/usr/lib是海湾合作委员会自动考虑的。


编辑

根据您在下面的评论,看起来您没有使用main()函数编译文件,或者您的名字main()拼写错误。确保temp.cc包含以下一个且仅包含一个函数:

int main();
int main(int argc, char** argv);

当然,您确实记得大写/小写很重要。 :)

Boost.Filesystem 使用 Boost.System 中的东西。你也必须与之联系。

您看到的错误消息:

/usr/lib/libboost_filesystem.a(operations.o): In function 
`boost::filesystem3::detail::dir_itr_close(void*&, void*&)':
(.text+0x4d): undefined reference to `boost::system::system_category()'

这是对Boost.System的引用

添加-lboost_system,你应该很高兴(或者,至少更好)。

使用 -lboost_filesystem 编译