Qt Creator on mac osx: c++ headers not being found / boost/shared_ptr.hpp: No such file or directory



  • I started using Qt Creator 2.8.2 on mac osx 10.9.4 for sailfish OS application development (Downloaded Qt Creator from https://sailfishos.org)

    If I want to compile a sample c++ file including header from boost, the compilation fails showing
    "fatal error: boost/shared_ptr.hpp: No such file or directory".

    I downloaded boost 1.55.0_2 with brew (brew install boost --with-c++11) and all necessary header files are in "/usr/local/Cellar/boost/1.55.0_2/include/boost" aliasing to "/usr/local/include/boost/".

    In my *.pro file, I added

    @INCLUDEPATH += /usr/local/include/@

    and

    @LIBS += /usr/local/lib/@

    But this doesn't help, I still can't use boost header files because of

    @/app/src/harbour-wlan-keyboard.cpp:41:32: fatal error: boost/shared_ptr.hpp: No such file or directory"@

    Do you have any idea whats wrong here?

    @/* Compiler output */
    14:39:44: Running steps for project harbour-wlan-keyboard...
    14:39:44: Starting: "/Users/abertschi/.config/SailfishAlpha4/mer-sdk-tools/MerSDK/SailfishOS-i486/qmake" /Users/abertschi/src-proj/sailfish-wlan-keyboard/app/harbour-wlan-keyboard.pro -r -spec linux-g++ CONFIG+=debug CONFIG+=declarative_debug CONFIG+=qml_debug

    Building target platforms: i486-meego-linux-gnu
    Building for target i486-meego-linux-gnu
    Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.7aqDeI
    14:39:46: The process "/Users/abertschi/.config/SailfishAlpha4/mer-sdk-tools/MerSDK/SailfishOS-i486/qmake" exited normally.
    14:39:46: Starting: "/Users/abertschi/.config/SailfishAlpha4/mer-sdk-tools/MerSDK/SailfishOS-i486/make"
    Building target platforms: i486-meego-linux-gnu
    Building for target i486-meego-linux-gnu
    Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.T01IUh
    g++ -c -pipe -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -m32 -march=i486 -fasynchronous-unwind-tables -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -D_REENTRANT -fPIE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_QUICK_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt5/mkspecs/linux-g++ -I../app -I../app/src/lib -I/usr/local/include -I/usr/include/sailfishapp -I/usr/include/mdeclarativecache5 -I/usr/include/qt5 -I/usr/include/qt5/QtQuick -I/usr/include/qt5/QtQml -I/usr/include/qt5/QtNetwork -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -I. -I. -o harbour-wlan-keyboard.o ../app/src/harbour-wlan-keyboard.cpp
    ../app/src/harbour-wlan-keyboard.cpp:41:32: fatal error: boost/shared_ptr.hpp: No such file or directory
    compilation terminated.
    @

    @
    /* sample c++ file */

    #ifdef QT_QML_DEBUG
    #include <QtQuick>
    #endif

    #include <sailfishapp.h>
    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <stdexcept>
    #include <vector>
    #include <boost/shared_ptr.hpp>

    using namespace std;

    int main(int argc, char *argv[])
    {
    // SailfishApp::main() will display "qml/template.qml", if you need more
    // control over initialization, you can use:
    //
    // - SailfishApp::application(int, char *[]) to get the QGuiApplication *
    // - SailfishApp::createView() to get a new QQuickView * instance
    // - SailfishApp::pathTo(QString) to get a QUrl to a resource file
    //
    // To display the view, call "show()" (will show fullscreen on device).

    /*return SailfishApp::main(argc, argv);*/
    return 0;
    

    @
    }

    @/* pro file */
    TARGET = harbour-wlan-keyboard

    CONFIG += sailfishapp

    SOURCES += src/harbour-wlan-keyboard.cpp

    INCLUDEPATH += src/lib/
    INCLUDEPATH += /usr/local/include/

    LIBS += /usr/local/lib/

    OTHER_FILES += qml/harbour-wlan-keyboard.qml
    qml/cover/CoverPage.qml
    qml/pages/FirstPage.qml
    qml/pages/SecondPage.qml
    rpm/harbour-wlan-keyboard.changes.in
    rpm/harbour-wlan-keyboard.spec
    rpm/harbour-wlan-keyboard.yaml
    translations/*.ts
    harbour-wlan-keyboard.desktop

    to disable building translations every time, comment out the

    following CONFIG line

    CONFIG += sailfishapp_i18n
    TRANSLATIONS += translations/harbour-wlan-keyboard-de.ts@


  • Moderators

    What is the output of:

    ls -lh /usr/local/include/boost



  • ls -lh /usr/local/include/boost is pointing to:

    /usr/local/include/boost -> ../Cellar/boost/1.55.0_2/include/boost

    There are all header files.


  • Moderators

    Sorry I actually wanted to see the files and forgot that command would just show the link, can you:

    cd /usr/local/include/boost
    ls -lh

    and post that for me?

    Thanks.


  • Moderators

    Can you also show me the line of code that is failing, this one:

    ../app/src/harbour-wlan-keyboard.cpp:41



  • Thanks for your support.

    I)
    @ cd /usr/local/include/boost
    ls -lh
    @

    Here is the output: https://gist.github.com/abertschi/b177e45d6258ef2aed19

    II.)

    @./app/src/harbour-wlan-keyboard.cpp:41:32: @

    is the include of the boost header file:

    @#include <boost/shared_ptr.hpp>@



  • Btw, my os has Xcode in version 5.1.1 (5B1008) installed.


  • Moderators

    Ok I don't see anything wrong so lets test a few more things:

    1. If you cat /usr/local/include/boost/shared_ptr.hpp does it work? Do this as the user that is doing the build. Making sure there is no permission issue and that it can actually read the file.

    2. Trying adding INCLUDEPATH += /usr/local/Cellar/boost/1.55.0_2/include to your project file. This will test to see if there is some kind of symlink issue or something.

    Your symlink looks good, your files look good (no permissions issues I can see), and your include path in your build looks good. It should work so it's weird that it isn't.



  • 1.) cat /usr/local/include/boost/shared_ptr.hpp looks good. I trigger the build in Qt Creator by "Build Project". The user is the same as I used for cat.

    2.) I have already tried to include
    INCLUDEPATH += /usr/local/Cellar/boost/1.55.0_2/include
    but without success. I get the same error showing "no such file or directory".

    I packed the whole project as zip: http://abertschi.ch/default_public/qt/app.zip

    Even if I exclude all Sailfish OS specific #includes and just include the boost library in a simple cpp file, the boost header can't be found.

    Do you have any other idea ?


  • Moderators

    This is really weird. Let's try removing Qt from it and just do:

    @
    // main.cpp

    #include <boost/shared_ptr.hpp>

    int main(int argc, char *argv[])
    {
    return 0;
    }
    @

    Then to build (on command line):

    @
    g++ -I/usr/local/include -o main main.cpp
    @

    If that has the problem them we can try to figure it out from there, if not it's something Qt is doing and we can look further into it.



  • It's weird indeed. The compilation by command line works just fine.


  • Moderators

    Ok, lets make it into a Qt project and see if that works. Assuming you have an empty directory with just main.cpp in it, do

    @
    qmake -project
    @

    Then edit the resulting pro file and add:

    @
    INCLUDEPATH += /usr/local/include
    @

    Then try:

    @
    qmake
    make
    @

    See if that builds.



  • make shows me
    @
    make: Nothing to be done for `first'.
    @

    Although the code was never compiled.

    Generated Makefile: https://gist.github.com/abertschi/d77626909a2f0a8d6912



  • Just to keep you on track.
    The next things I'm going to try are:

    • Download Qt 5.3.1 and try to compile with boost headers

    • Try to find an older Sailfish Qt release and try to compile with boost headers

    @ambershark, I really appreciate your help, thanks a lot. If you have any other idea please let me know.


  • Moderators

    Let me see the generated pro file, or you can just try:

    @
    make distclean
    qmake
    make
    @

    If distclean doesn't cause a recompile, then

    @
    rm *.o
    rm main
    qmake
    make
    @

    That should force the compile and we'll see what happens.

    And boost should work even without compiling it into qt, but adding it to qt would be the better approach. This guarantees compatibility.



  • @make distclean @

    or

    @rm *.o @

    don't help. No out files were generated.

    @ make: Nothing to be done for `first'.@

    All I get is the above message and the Makefile:

    @
    drwxr-xr-x 5 abertschi staff 170 26 Jul 02:08 .
    drwxr-xr-x 5 abertschi staff 170 26 Jul 01:35 ..
    -rw-r--r-- 1 abertschi staff 4891 26 Jul 02:08 Makefile
    -rw-r--r-- 1 abertschi staff 83 26 Jul 01:29 main.cpp
    -rw-r--r-- 1 abertschi staff 302 26 Jul 02:08 qt-proj.pro
    @


  • Moderators

    Let me see that qt-proj.pro file...



  • @######################################################################

    Automatically generated by qmake (2.01a) Sa. Jul 26 01:29:05 2014

    ######################################################################

    TEMPLATE = subdirs

    SOURCES += main.cpp

    Directories

    INCLUDEPATH += /usr/local/include
    @


  • Moderators

    Ok there's the problem. It is using a subdirs template. Not sure why it would have generated that.

    Make a new pro file with this:

    @
    TEMPLATE = app
    TARGET = main
    INCLUDEPATH += /usr/local/include .
    QT += core

    SOURCES += main.cpp
    @

    Then try building.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.