使用简单 Ls.cpp 的 C++ Boost 编译错误 - 未定义对 boost::filesystem::path::filename 的引用

Posted

技术标签:

【中文标题】使用简单 Ls.cpp 的 C++ Boost 编译错误 - 未定义对 boost::filesystem::path::filename 的引用【英文标题】:C++ Boost Compile Error with Simple_ls.cpp - Undefinded Referece to boost::filesystem::path::filename 【发布时间】:2014-02-18 01:19:31 【问题描述】:

我对 C/C++ 有点“新”。我花了很多时间把头撞到桌子上,试图在我的 Windows 8 64 位计算机上安装 Boost 并使用 MinGW。在我寻找答案的过程中,我在其中找到了a MinGW compiled with Boost 1.55 libraries。双击 open_distro_window.bat 后,错误已更改为不同的内容。使用simple_ls.cpp example from the Boost site,我收到以下错误:

> g++ simple_ls.cpp -o simple_ls.exe
C:\Users\joe\AppData\Local\Temp\ccQLpVCt.o:simple_ls.cpp:(.text+0x1ba): undefined reference to `boost::filesystem::path::filename() const'
C:\Users\joe\AppData\Local\Temp\ccQLpVCt.o:simple_ls.cpp:(.text+0x23a): undefined reference to `boost::filesystem::path::filename() const'
C:\Users\joe\AppData\Local\Temp\ccQLpVCt.o:simple_ls.cpp:(.text+0x294): undefined reference to `boost::filesystem::path::filename() const'
C:\Users\joe\AppData\Local\Temp\ccQLpVCt.o:simple_ls.cpp:(.text+0x4bf): undefined reference to `boost::filesystem::path::filename() const'
c:/mingw-boost/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.8.2/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\joe\AppData\Local\Temp\ccQLpVCt.o: bad reloc address 0x0 in section `.data'
collect2.exe: error: ld returned 1 exit status

我还尝试了第一个示例Boost Getting Started Link Your Program,但我仍然遇到了更多错误,但一次只有一个。有什么我遗漏的东西,是用 Boost 编译的 MinGW 的设置不好,还是 Windows 8? This is a link to the errors on GitHub.

【问题讨论】:

你应该链接到 boost_filesystem。 你的意思是当我发出g++ simple_ls.cpp -o simple_ls.exe 时我应该使用-l 选项?或者有什么类似于把它放在预处理器区域?我不太热衷于这类事情。 是的,-l library_filename。如果编译器找不到lib文件,则应将文件路径添加到lib路径中。 【参考方案1】:

使用带有-l library_filename 选项的g++。如果你的boost库不在系统的lib路径下,则使用-L BOOST_LIB_DIR选项,让编译器在指定目录中查找库文件。

【讨论】:

到达某个地方。现在我只收到一个错误。 >g++ -l "C:\MinGW-Boost\MinGW\lib\" simple_ls.cpp -o simple_ls.exe c:/mingw-boost/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.8.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lC:\MinGW-Boost\MinGW\lib" simple_ls.cpp -o simple_ls.exe collect2.exe: error: ld returned 1 exit status 这是环境变量设置的链接。 gist.github.com/predatorian3/9062785#file-boost_system_vars-bat boost_filesystem的文件名(可能像libboost_filesystem*)应该在-l选项之后,而不是目录。 我最终做的是使用它,并安装这个 MinGW 编译器和已经从 nuwen.net/mingw.html 链接的 Boost 这让我可以使用你所说的。我还必须联系开发人员并添加更多选项。最后,编译程序的参数是:g++ -v -Wall -Wextra simple_ls.cpp -o simple_ls.exe -lboost_filesystem -lboost_system希望能帮助其他人。

以上是关于使用简单 Ls.cpp 的 C++ Boost 编译错误 - 未定义对 boost::filesystem::path::filename 的引用的主要内容,如果未能解决你的问题,请参考以下文章

怎么编一个c++小游戏

C++ Boost ASIO 简单的周期性定时器?

C++ Boost Asio 简单聊天教程

使用 Xcode 4 编译使用 Boost::mpi 的 C++

C++使用boost 1.75版本来读写JSON文件

Thrift C++ 链接器错误(Boost 智能指针)