Программа не запускается при связывании файловой системы boost - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь запустить программу helloworld, которая использует файловую систему boost.Я на Windows с MinGW 8.1 и Boost 1.70.Проблема в том, что, хотя все компилируется, программа не запускается.Я имею в виду, что он работает, но ничего не печатает, что означает, что основная функция даже не выполняется:

#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: / Code / boost_1_70_0"

Я собрал надстройку для MinGW, следуя инструкции, и все прошло хорошо,в выходной папке я вижу много разных версий каждой библиотеки в зависимости от целей по умолчанию (я их не выбрал, просто использовал значения по умолчанию).

Как отладить запуск main.exe длявидите, что вызывает аварию?Прошло много лет с тех пор, как я написал C ++, поэтому мне нужна помощь, чтобы вернуться на правильный путь!:)

1 Ответ

0 голосов
/ 07 июня 2019

Проблема заключалась в том, как @kenba указала, что динамическое связывание с dll-бустами терпит неудачу. Я ошибочно думал, что связал статическую версию библиотек наддува. Чтобы на самом деле добиться этого, я должен был использовать эту команду:

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"

вместо того, который я выложил в ОП.

...