Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Qt Creator error “No such file or directory” when using boost in mongocxx



  • I'm writing an application in Qt and want to add the mongocxx driver to access data in my db. I've added the libs and header files using LIBS and INCLUDEPATH. Now, mongocxx also requires boost. But now I get the error: C:\mongo-cxx-driver-3.4.1\include\bsoncxx\v_noabi\bsoncxx\stdx\string_view.hpp:40: error: boost/version.hpp: No such file or directory #include <boost/version.hpp>. When I include the file in main.cpp, everything works fine. What should I do?

    My .pro file:

    QT += quick
    
    CONFIG += c++17
    
    DEFINES += QT_DEPRECATED_WARNINGS
    
    SOURCES += \
            main.cpp \
            signIn.cpp \
            signUp.cpp
    
    INCLUDEPATH += C:\mongo-cxx-driver-3.4.1\include\bsoncxx\v_noabi \ C:\mongo-cxx-driver-3.4.1\include\mongocxx\v_noabi \ D:\boost_1_72_0
    
    RESOURCES += qml.qrc
    
    TRANSLATIONS += \
        LogIn_en_CA.ts
    
    QML_IMPORT_PATH =
    
    QML_DESIGNER_IMPORT_PATH =
    
    qnx: target.path = /tmp/$${TARGET}/bin
    else: unix:!android: target.path = /opt/$${TARGET}/bin
    !isEmpty(target.path): INSTALLS += target
    
    HEADERS += \
        signIn.h \
        signUp.h
    
    LIBS += C:\mongo-cxx-driver-3.4.1\lib\bsoncxx.lib \ C:\mongo-cxx-driver-3.4.1\lib\mongocxx.lib
    

  • Lifetime Qt Champion

    Hi @SimonR,

    I see two issues with your pro file:

    1. D:\boost_1_72_0 please replace all backslashes with forward slashes D:/boost_1_72_0
    2. The linker line should look like this (prefix paths with -L and lib names with -l and omit the suffix .lib:
    LIBS += -LC:/mongo-cxx-driver-3.4.1/lib -lbsoncxx \
            -LC:/mongo-cxx-driver-3.4.1/lib -lmongocxx
    

    Regards



  • I've changed my .pro file to this now, but I still get the same error.

    QT += quick
    
    CONFIG += c++17
    
    DEFINES += QT_DEPRECATED_WARNINGS
    
    SOURCES += \
            main.cpp \
            signIn.cpp \
            signUp.cpp
    
    INCLUDEPATH += C:/mongo-cxx-driver-3.4.1/include/bsoncxx/v_noabi \ C:/mongo-cxx-driver-3.4.1/include/mongocxx/v_noabi \ D:/boost_1_72_0
    
    RESOURCES += qml.qrc
    
    TRANSLATIONS += \
        LogIn_en_CA.ts
    
    QML_IMPORT_PATH =
    
    QML_DESIGNER_IMPORT_PATH =
    
    qnx: target.path = /tmp/$${TARGET}/bin
    else: unix:!android: target.path = /opt/$${TARGET}/bin
    !isEmpty(target.path): INSTALLS += target
    
    HEADERS += \
        signIn.h \
        signUp.h
    
    LIBS += -LC:/mongo-cxx-driver-3.4.1/lib -lbsoncxx \
            -LC:/mongo-cxx-driver-3.4.1/lib -lmongocxx
    


  • This post is deleted!


  • @SimonR

    No such file or directory #include <boost/version.hpp>.

    I guess you need to provide INCLUDEPATH with a path that points to a place where you can later finder a subfolder boost which insides has a file version.hpp

    So since you provide D:/boost_1_72_0 does it hold there?
    I mean is your folder structure like this?:

    D:
    |---boost_1_72_0
        |---boost
            |---version.hpp
    


  • @Pablo-J-Rogina
    Yes, my folder structure looks excactly like you discribed it. The strange thing is that when I include it in the main file,
    it doesn't cause any errors. I've set up an test application in Visual Studio and everything works fine there.


  • Lifetime Qt Champion

    @SimonR

    What happens if you fix your include path?

    INCLUDEPATH += C:/mongo-cxx-driver-3.4.1/include/bsoncxx/v_noabi \ 
          C:/mongo-cxx-driver-3.4.1/include/mongocxx/v_noabi \ 
          D:/boost_1_72_0
    

    Also, please show the compile output line leading to this error so we can check the flags passed to the compiler.



  • Strange, it's compiling now. But when I try to access a database using

    mongocxx::instance inst{
    mongocxx::client conn{ mongocxx::uri{"connection string goes here"} };
    bsoncxx::builder::stream::document document{};
    

    , I get lots of errors. I think these are linking errors.

    d8ca774c-eef3-492d-8fdb-f49314a757f9-image.png

    Please excuse that I ask a lot, but I'm new to Qt Creator.


  • Lifetime Qt Champion

    Hi,

    Are you sure that the libraries are of the correct architecture and built by the same compiler ?



  • The compiler used for building the driver was MSVC, so that might be an issue because Qt Creator uses MinGW. How can I change the compiler?


  • Lifetime Qt Champion

    @SimonR
    Hi
    Use Qt maintenance tool to install the visual studio version of Qt for 2017/2019 32/64 VS
    and then go and download the compiler from Microsoft site.



  • @mrjj
    Can you please provide me better guide how to change the compiler? I've looked it up in the internet but I haven't found anything useful. Ans can I still compile QML applications with MSVC?


  • Lifetime Qt Champion

    Well: go to the Microsoft website, download the Visual Studio installer, then execute it.

    As for Qt Quick, the compiler has no role here. As long as you have the modules built, it will work.



  • So, I have Visual Studio now, anything else I have to do? The compiler is still MinGW.


  • Lifetime Qt Champion

    As @mrjj already suggested, did you install the MSVC build of Qt ?



  • When I open Qt Maintenance Tool, it looks like this:
    38cedf62-5358-438d-b3b4-0e3f8b27bcfd-image.png


  • Lifetime Qt Champion

    @SimonR Did you select Kit configured for MSVC compiler/Qt to build you project?



  • I've selected the right compiler now,
    40fa38e3-8282-4101-ad3d-f6958120265c-image.png
    but when I try to run the program, I get an error.
    1f000937-a8e5-4c5e-8ff6-d61d251da9d9-image.png
    When I open the kits section, it shows some warnings:
    07d09771-b8c0-44aa-aa74-d29089de6514-image.png
    Is this normal? Or do I have to set up something else? Also, I found out that you can change it compiler, but it only shows amd64 and x86 architecture. I have an Intel processor, can I still use the amd64 because I haven't found the right settings for Intel processors?
    b812af3a-963f-4931-8966-50c00457d3e6-image.png


  • Lifetime Qt Champion

    @SimonR Run it through debugger - looks like it is crashing.



  • So I've set up the compiler now, but when I run the application I get errors:
    4ba8dbb8-adb6-4ec1-9dec-bce6b42e8574-image.png

    I don't know why the language is German, because it's set to English. But as far as I know, those errors are linking errors, so I guess the libraries are not included correctly.

    Here is my .pro file:

    QT += quick
    
    CONFIG += c++17
    
    DEFINES += QT_DEPRECATED_WARNINGS
    
    SOURCES += \
            main.cpp \
            signIn.cpp \
            signUp.cpp
    
    INCLUDEPATH += C:/mongo-cxx-driver-3.4.1/include/bsoncxx/v_noabi \
                   C:/mongo-cxx-driver-3.4.1/include/mongocxx/v_noabi \
                   D:/boost_1_72_0
    
    RESOURCES += qml.qrc
    
    TRANSLATIONS += \
        LogIn_en_CA.ts
    
    QML_IMPORT_PATH =
    
    QML_DESIGNER_IMPORT_PATH =
    
    qnx: target.path = /tmp/$${TARGET}/bin
    else: unix:!android: target.path = /opt/$${TARGET}/bin
    !isEmpty(target.path): INSTALLS += target
    
    HEADERS += \
        signIn.h \
        signUp.h
    
    LIBS += -LC:/mongo-cxx-driver-3.4.1/lib -lbsoncxx \
            -LC:/mongo-cxx-driver-3.4.1/lib -lmongocxx
    

  • Lifetime Qt Champion

    @SimonR Looks like you're not linking properly against mongocxx. Which compiler was used to build those libraries and are they 32bit or 64bit?



  • I've played with the setting a bit and now, it compiles, but it doesn't run and shows an error:
    200de448-d179-49ab-88a2-548f494b1f64-image.png

    And when it try do run the debugger, it also shows an error:
    bf60b637-3af4-462b-83a2-97be35929eb7-image.png


  • Lifetime Qt Champion

    @SimonR The last error says what is wrong and what needs to be done



  • So, i can compile the project now with MSVC, but when I try to make an connection using

    mongocxx::instance inst{};
    mongocxx::client conn{ mongocxx::uri{"my connection string"} };
    bsoncxx::builder::stream::document document{};
    

    it throws the same error as before:
    ea7b3506-a3a1-45be-9308-b87dce103316-image.png
    When I delete the libs part in the .pro file, it works again and keeps working, until I include the libs again and try to use something from mongocxx.


  • Lifetime Qt Champion

    As a test, copy the dlls from that library in the same folder as your executable.



  • @SGaist no, that didn't help. Still the same error.


  • Lifetime Qt Champion

    Then check that you have all the related dependencies available.



  • I've created a project in Visual Studio 2019 now with the same settings as in Qt Creator, and it works. Included all the header files, libs and dlls and it works. Don't know why this isn't working in Qt Creator. I've tried this but I get the same error. I have to delete the LIBS part and then it runs again. All the dlls are in the folder, but it crashes all the time.


Log in to reply