Link Boost with Qt Creator on Mac - c++

I have installed boost using Homebrew and got everything set up in my .pro file.
myProFile
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
src/nmea-tests.cpp \
src/position.cpp \
src/utilities.cpp \
src/parsenmea.cpp
HEADERS += \
headers/parseNMEA.h \
headers/position.h \
headers/types.h \
headers/utilities.h
INCLUDEPATH += headers/
LIBS += -lboost_unit_test_framework
macx {
QMAKE_CFLAGS += -std=c++11 -stdlib=libc++
QMAKE_CXXFLAGS += -std=c++11 -stdlib=libc++
LIBS += -L"/usr/local/Cellar/boost/1.63.0/lib" -lboost_random
INCLUDEPATH += "/usr/local/Cellar/boost/1.63.0/include"
}
However, when I try to build the project, Qt can't find boost/test/unit_test.hpp file
Compiler Error Message:
/Users/hadyfarhat/Documents/ntu/courses/soft/task4/gps/src/nmea-tests.cpp:3: error: 'boost/test/unit_test.hpp' file not found
#include <boost/test/unit_test.hpp>
^~~~~~~~~~~~~~~~~~~~~~~~~~

I would say the better way is using /usr/local/opt/boost for Intel and /opt/homebrew/opt/boost for Apple Silicon in your case. Then you don't need to worry about the problem of the version.

I had to change boost version from 1.63.0 to 1.66.0.
For Future problems with boost use my question as a guide and be sure to install homebrew before that.

Related

How linux and g++ understand what include path it needs to use?

I'm not quite completely understand how linux or g++ (gcc) define what include path it need to use to find some package. Here is what I mean:
I actually have a c++ project in QtCreator and I use qmake build system. I include in my code a header-only framework file, which needs a Boost of one of the last version. I have already in my system boost-1.64.0, but it's too old, so I've installed boost-1.80.0. But when I try to build the program a compilation error raises with the text:
{name_of_my_pro_file}.pro: rpm boost1.64.0-devel is not installed!!!
I thought if I just replace boost folder in /usr/include/ or /usr/local/include/ with folder of the newer boost version linux can use it instead of older one. But the error mentioned above still raises. I've tried to edit boost folder name in Makefile. Directly in my .pro file there is not any mentions about boost. But nothing helped me. I can handle it only when I renamed boost-1.80.0 folder to boost-1.64.0. And now it works.
It seems that name boost-1.64.0 is written somewhere in the system and it doesn't see any other packages.
I guess that I just don't understand how to work with this stuff correctly and doing something wrong. Can somebody explain what should I do?
My distro is Oracle Linux Server 8.4.
EDIT:
My .pro file:
QT += core gui network xml
QMAKE_CXXFLAGS += -std=c++0x
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = TilesDataProvider
TEMPLATE = app
#DESTDIR = ./output
DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += QT_DEPRECATED_WARNINGS
CONFIG += no_abi_dump
INCLUDEPATH += \
$$PWD \
$$PWD\guts \
$$PWD\SRTM \
$$PWD\tileSources \
/usr/include
CONFIG(release, debug|release){
message(release)
TARGET = TilesDataProvider
OBJECTS_DIR = tmp/TilesDataProvider/release
MOC_DIR = tmp/TilesDataProvider/moc
}
CONFIG(debug, debug|release){
message(debug)
TARGET = TilesDataProvider_d
OBJECTS_DIR = tmp/TilesDataProvider/debug
MOC_DIR = tmp/TilesDataProvider/moc
DEFINES += _DEBUG
}
SOURCES += \
main.cpp \
tileSources/MapTileSource.cpp \
tileSources/SrtmTileSource.cpp \
guts/Position.cpp \
guts/t_task.cpp \
guts/MapConversions.cpp \
SRTM/altdatabank.cpp \
SRTM/altdatamap.cpp \
SRTM/geoid.cpp \
SRTM/srtm_coordinate.cpp \
SRTM/t_geodata.cpp \
SRTM/t_pageid.cpp \
t_image.cpp \
tilesdataprovider.cpp
HEADERS += \
tileSources/MapTileSource.h \
tileSources/SrtmTileSource.h \
guts/MapGraphics_global.h \
guts/Position.h \
guts/t_task.h \
guts/MapConversions.h \
SRTM/altdatabank.h \
SRTM/altdatamap.h \
SRTM/geoid.h \
SRTM/srtm_coordinate.h \
SRTM/t_geodata.h \
SRTM/t_pageid.h \
SRTM/tiff_param.h \
t_image.h \
tilesdataprovider.h

Can't get Qt Creator to Properly Compile OpenCV

I am trying to compile a Qt project and it seems like OpenCV is having problems. From what I have read so far, this could likely be a compiler/linkage problem. I have tried a couple different compilers without any success. Other libraries seem to be fine (libtiff, STD, other Qt libraries), but OpenCV is causing problems. I haven't for the life of me been able to make any progress on fixing it, any suggestions would be much appreciated. Posted below are things that I believe might be valuable in finding a solution.
Qt Makefile (.pro):
QT += core gui multimedia widgets multimediawidgets opengl
TARGET = LAUWebCalTag
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
laumemoryobject.cpp \
lauwebcamerawidget.cpp \
lauvideosurface.cpp \
lauvideoglwidget.cpp \
laucaltagglwidget.cpp \
laucaltagglobject.cpp
HEADERS += \
laumemoryobject.h \
lauwebcamerawidget.h \
lauvideosurface.h \
lauvideoglwidget.h \
laucaltagglwidget.h \
laucaltagglobject.h
RESOURCES += lauwebcameracapture.qrc
CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
win32 {
INCLUDEPATH += $$quote(C:\Users\Sam\Downloads\opencv\build\include) $$quote(C:/usr/include)
INCLUDEPATH += $$quote(C:\Users\Sam\Downloads\tiff-4.0.9\tiff-4.0.9\libtiff)
DEPENDPATH += $$quote(C:\Users\Sam\Downloads\opencv\build\include) $$quote(C:/usr/include)
LIBS += -L$$quote(C:\usr\libs) -lopengl32
LIBS += -L$$quote(C:\Users\Sam\Downloads\opencv\build\x64\vc12\lib)
LIBS += -L$$quote(C:\Users\Sam\Downloads\tiff-4.0.9\tiff-4.0.9\libtiff) -llibtiff_i
CONFIG(release, debug|release): LIBS += -lopencv_world310
CONFIG(debug, debug|release): LIBS += -lopencv_world310d
}
Issues:
[Screenshot of Resulting Compile Issues]
Build and Run:
[Build and Run Kit Options]
[CMake (Not 100% sure if CMake is necessary for this project or right)]
I also thought the way cv:: was being declared was strange for this:
namespace cv
{
using std::vector;
}
I apologize for the dumb question, I am brand new to both Qt and OpenCV

Qt adding library gstreamer-1.0

I am making a project, dependent on gstreamer-1.0, glib-2.0 and gobject-2.0.
Building in console and in VSCode works fine, but when i get to Qt, i receive the following error message:
:error: cannot find /usr/lib/x86_64-linux-gnu/: File format not recognized
My .pro file:
QT += core
QT -= gui
TARGET = Accord
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp \
working_directory.cpp \
player_core.cpp \
message.cpp
HEADERS += \
working_directory.h \
message.h \
player_core.h
CONFIG += link_pkgconfig \
c++11
PKGCONFIG += gstreamer-1.0 \
glib-2.0 \
gobject-2.0 \
gio-2.0
INCLUDEPATH += /usr/local/include/ \
/usr/include \
/usr/include/gstreamer-1.0 \
/usr/include/glib-2.0 \
/usr/lib/x86_64-linux-gnu/glib-2.0/include \
/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include
LIBS += /usr/lib/x86_64-linux-gnu/ -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 \
-lgio-2.0 \
With specified pkgconfig should be enough. You don't need to specify the libraries independently. This might be necessary in Windows, but not in Linux. I use the next variables in Linux (Ubuntu):
CONFIG += link_pkgconfig
PKGCONFIG += gstreamer-1.0 glib-2.0 gobject-2.0 gstreamer-app-1.0 gstreamer-pbutils-1.0
If your GStreamer is in the default location it should work.
I solved it by changing QMAKE_CFLAGS_ISYSTEM = -isystem
to QMAKE_CFLAGS_ISYSTEM = -I (can be added to .pro).
for Qt 5.10 +
I think that LIBS += /usr/lib/x86_64-linux-gnu/ is incorrect, hence the
error: cannot find /usr/lib/x86_64-linux-gnu/: File format not recognized.
You probably meant
LIBS += -L/usr/lib/x86_64-linux-gnu/
to add the directory to ld's search path (although that shouldn't be necessary).

Qt project set to version 5 but qtcreator still looking for qt4 header files?

Here is a screenshot from the project view:
Here is the .pro file
#-------------------------------------------------
#
# Project created by QtCreator 2014-05-18T15:34:14
#
#-------------------------------------------------
QT += core
QT -= gui
TARGET = bedcoll
CONFIG += console
CONFIG -= app_bundle
QMAKE_CC = clang
QMAKE_CXX = clang++
QMAKE_CXXFLAGS += -std=c++11
QMAKE_CXXFLAGS += -D_FILE_OFFSET_BITS=64
INCLUDEPATH += /usr/include/c++/4.8
INCLUDEPATH += /usr/include/boost
LIBS += -lboost_system
LIBS += -lboost_filesystem
LIBS += -lboost_program_options
TEMPLATE = app
SOURCES += \
src/util.cpp \
src/bedcoll.cpp \
src/main.cpp
HEADERS += \
src/collgen_memo.h \
src/util.h \
src/bedcoll.h \
src/error_enum.h
This project builds without any problem in a kubuntu 13.10, but after upgrading to 14.04, it gives the following error:
/usr/include/qt4/QtCore/qstring.h:1045: error: undefined reference to `QString::toAscii() const'
/usr/include/qt4/QtCore/qstring.h:880: error: undefined reference to `QString::free(QString::Data*)'
/usr/include/qt4/QtCore/qstring.h:879: error: undefined reference to `QString::shared_null'
Kubuntu 14.04 ships qt5 as default, but qtcreator is still looking for qt4, very confusing.
#Netjat is right, cleaning up solves the problem, in fact there is a shortcut, just right click on the project and choose "rebuild".

Compiling SDL2 in QtCreator (MinGW)

Run into a recent issue whilst trying to compile SDL2 with QtCreator using MinGW. It seems that for some reason the libraries are not linking.
I know 100% that the libraries are in the correct place, as you can see in this picture:
And how i'm linking in my .pro file:
##Windows
win32 {
TEMPLATE = app
CONFIG -= app_bundle
CONFIG -= qt
##Debug & Release Mode Configs
CONFIG(debug, debug|release) {
CONFIG += console
} else {
CONFIG -= console
}
INCLUDEPATH += "C:\Users\Daniel\Desktop\SDL2-devel-2.0.0-mingw\SDL2-2.0.0\x86_64-w64-mingw32\include\SDL2"
LIBS += -L"C:\Users\Daniel\Desktop\SDL2-devel-2.0.0-mingw\SDL2-2.0.0\x86_64-w64-mingw32\lib" \
-lmingw32 \
-lSDL2 \
-lSDL2main \
-lSDL2_ttf \
-lSDL2_image \
-lSDL2_mixer \
-lopengl32
}
Edit:
Well I was building with the wrong version of the libs! Doh! But a new problem arises, which i think has something to-do with SDLmain.. Must be missing something in my .pro file but totally unsure what :S
Well solved it. Link for any future reference;
http://www.cplusplus.com/forum/beginner/110753/
-lSDL2main needs to be before -lSDL2. Dammit.