链接boost文件系统时,程序无法启动

时间:2019-06-06 17:57:44

标签: c++ gcc boost

我正在尝试运行一个使用boost文件系统的helloworld程序。 我在装有MinGW 8.1和Boost 1.70的Windows上。 问题是,尽管所有内容都能编译,但程序无法运行。我的意思是,它可以运行但不输出任何内容,这意味着主要功能甚至都没有执行:

#include <boost/filesystem.hpp>
#include <iostream>

using namespace std;
using namespace std::string_literals;
namespace fs = boost::filesystem;

int main()
{
    cout << "Hello Boost!" << endl;

    fs::path abHome{"C:/Users/Me"s};
    fs::path jsonFile = abHome / "jsonFile.json"s;
    if (!fs::exists(jsonFile)) {
        cout << "Creating json file from scratch." << endl;
    }
}

“ Hello Boost”从未打印到控制台。 我已经从命令行使用CMake和g ++进行了编译,以试图更好地了解发生了什么:

g ++ main.cpp -o main -L“ C:/ Code / boost_1_70_0 / stage / lib” -lboost_filesystem-mgw81-mt-x64-1_70 -lboost_system-mgw81-mt-x64-1_70 -I“ C:/代码/ boost_1_70_0“

我已经按照指南编译了MinGW的Boost,一切都进行得很好,在输出文件夹中,我看到了基于默认目标的每个库的许多不同版本(我还没有真正选择它们,只是使用了默认值) )。

如何调试main.exe的启动以查看导致崩溃的原因?自编写C ++以来已经有很多年了,所以我需要帮助才能回到正轨! :)

1 个答案:

答案 0 :(得分:0)

正如@kenba指出的那样,问题是boost dll的 dynamic 链接失败。 我错误地认为我已经链接了Boost库的静态版本。 要实际实现这一点,我应该使用以下命令:

g++ main.cpp -o main -L"C:/Code/boost_1_70_0/stage/lib" -l:"libboost_filesystem-mgw81-mt-x64-1_70.a" -l:"libboost_system-mgw81-mt-x64-1_70.a" -I"C:/Code/boost_1_70_0"

而不是我在OP中发布的那个。