Qt, OpenCV, Windows or Linux, package management? - linux

I made this tutorial about a year and a half ago:
https://www.youtube.com/watch?v=akAAAvGyLn0
To summarize, at the time, the best way I could find to get Qt and OpenCV running together on Windows 10 was to download the source for OpenCV, download CMake, check the Qt option, compile OpenCV fully from source, and then edit the .pro file within Qt Designer.
This process is very time consuming (the video linked above is about an hour) and results in a configuration where OpenCV has to be in the exact location specified in the .pro file settings, which are cryptic and very non-intuitive.
With package management having progressed quite a bit in the last year and a half, I'd like to re-do this video using some sort of package management to use pre-compiled binaries and greatly ease and expedite the process.
Within Visual Studio I use NuGet packages for almost everything as they are quick and work great. Moreover, making your own NuGet if there is not an existing one is not that difficult.
So for those familiar with Qt and/or package management (outside of Visual Studio) more than I am, here are my questions:
-Does Qt have a NuGet equivalent? I just downloaded / installed the most recent Qt (5.8) and I can't seem to find any NuGet equivalent in the installer or the menus (this seems very archaic for 2017)
-If there is not a NuGet equivalent within Qt, is there an industry standard package manager that would work with Qt and Windows? What about for common Linux distributions such as Ubuntu? I found this link: http://rodrigoberriel.com/2014/11/using-opencv-3-qt-creator-3-2-qt-5-3/ is this the best way to use Qt / OpenCV on Linux ?
-It seems Chocolatey has an OpenCV package: https://chocolatey.org/packages/OpenCV but since the default compile options for OpenCV don't include Qt, and this page seems to state that the package is compiled with the default options, I gather Qt is not supported, is this correct? Even if Qt is supported, will putting the Chocolatey OpenCV package name in the .pro file be recognized by Qt, or is that only a Linux thing?
I would really like to continue supporting Qt in my OpenCV tutorials, but with how quick and painless it is to use OpenCV within Visual Studio now (just choose an applicable NuGet package) and how difficult it is in Qt, I'm considering no longer using Qt until they get a NuGet package equivalent going. Can anybody provide assistance with the above questions / concerns?

Related

Distribute wxWidgets applications on Linux platforms

I started to learn wxWidgets some days ago and I found it really good, but when I tried to "export" it to another platform, it didn't work. I expected that, but when I searched how to distribute wxWidgets apps, I didn't find that much, except to install all the wxWidgets library on that platform.
I use Debian 10, while the other platform where I need to export my app uses Lubuntu. It says that it needs a wxgtk3.0 library, but I guess that library will need even more libraries.
How do I export my wxWidgets application without asking the user to manually install and build all the library on its platform? Maybe even using .deb package (if really needed). Thanks in advance.
Please understand that every single distribution uses it own format comparing to Windows where there is an Installation Wizard or OSX where there is a Bundle.
Now, you can create a deb file where you set everything up.
So you can create an rpm (which is basically the same thing as deb, just for different distribution).
This is the best way as it ensures that all dependencies and their versions are satisfied.
Hope this helps!
Many Linux distributions have wxWidgets packages, so one possibility would be to simply ask users to install these packages when they need to use your application. This is not really different from installing GTK libraries or even X11 (or Wayland) that your application also depends on -- the only difference is that these libraries are almost surely already installed on any Linux desktop system, while wxWidgets ones might not be.
Another alternative is to link your application statically with wxWidgets libraries. This will make it much bigger and will prevent the users from upgrading the libraries on their system to improve the application behaviour, but can be simpler for the users to install. Note that if you choose the static linking route, you typically need to build your application on the oldest distribution you want to support (which is probably not Debian 10, which is relatively recent), as this is a simple way to ensure that it doesn't require newer versions of the (other, non-wx) libraries than the ones already present on the user's system.

Application deployment with 3rd-party dependencies for both Linux and Windows, using CMake and Conan

I'm working on a project, which targets both Windows and Linux (and possible in the future MacOS). It consists of some applications with several shared libraries. It is written in modern C++ and modern CMake. It also uses 3rd-party libraries like Qt, OpenCV, Boost, GraphicsMagick, samplerate, sndfile. Those dependencies are handled through Conan package manager. I'm building both on Linux (Ubuntu 18.04, GCC 8.1) and Windows (via WSL - also Ubuntu 18.04, MinGW-w64 8.1). I'm using fairly recent versions of 3rd-party libraries with custom built options (strictly speaking - different versions than available on Ubuntu's APT, e.g. Qt v5.11.3, or custom built of GraphicsMagick)
I'm using CPack. On Windows I'm building NSIS installer, but on Linux I would like to use DEB generator (may be other if needed). All of my targets (written apps and shared libs) have appropriate CMake's INSTALL configurations, so they are copied correctly into the generated installers (component based installation). The real problem comes with packaging of 3rd-party dependencies.
Problem
Strictly speaking, I have no idea, how to do it well using CMake+CPack+Conan, both on Linux and Windows. I've read a lot of articles and posts, but I'm stucked. I would like to have something, that automatically bundles into the installer all 3rd party libraries used by project with needed plugins and, what is the most important, with needed system/compiler libraries (libgomp, libstdc++ and so on).
Possible solution
To my surprise, on Windows, this task is fairly easy, because every DLL used by app (my libs, 3rd-party libs and system/compiler libs) needs to be located where executable is. I'm engaging Conan into this, by importing all used DLLs into bin directory. In the end, in most naive way of packaging, I will just copy the bin directory into the installer and it should work. But I'm not sure, if this approach is OK.
On Linux, things are more complicated. First, there is arleady a package manager. Unfortunately, libraries/compilers available there are too old for me (e.g. on APT there is only Qt 5.9.6 ) and are built using different compile options. So, the only way for me is to ship them with my software (like in Windows). There are also issues with searching for dynamic libraries by ld, RPATH handling and so on. At the moment, the only solution I see is to write something like 'launcher' for my app, which sets LD_LIBRARY_PATH before program starts. After that, in this case we can just copy bin or lib directory to the DEB installer and this should work. But still, I don't know if this is correct approach.
Other solutions
I've also looked into other solutions. One of them was BundleUtilities from CMake. It doesn't work for me. It has a lot of problems in recognizing, whether some library is system or local one. Especially in WSL, where it stucked in processing dependencies to USER32.dll, KERNEL32.dll. BundleUtilities in Windows worked for me only with MSYS, but in MSYS I've failed to compile some 3rd-party libraries (GraphicsMagicks via Conan) and that's the reason, why I'm using WSL.
Summary
I'm looking for good and verified method of packaging C++ projects with multiple apps, libs and shipped 3rd-party libs, both for Windows and Linux. How are you doing things like this? Are you just copying bin and/or lib dirs to the installers? How (in terms of CMake/CPack code) are you doing that? INSTALL(DIRECTORY ...), or similar? I'm not sure, but I think that this problem should be already solved in the industry. ;)
Thanks for all suggestions.
First, Conan is a package manager for development, not for distribution, that's why you didn't find an easy way to solve your problem. Second, most of discussions are made at Conan issue, including bugs and questions. There you will find a big community + Conan devs which are very helpful.
with needed system/compiler libraries
This is not part of Conan. Why you don't use static linkage for system libraries?
Talking about CPack, we have an open discussion about it usage with Conan: https://github.com/conan-io/conan/issues/5655
Please, join us.
I see few options for your case:
on package method, run self.copy and all dependencies from self.cpp_deps, which includes all libraries, so you can run Cpack
Use Conan deploy generator to deploy all artifacts, and using a hook you can run cpack or any other installer tool
Out friend SSE4 is writing a new blog post about Deployment + Conan, I think it can help you a lot. You can read a preview here.
Regards!

Unity 3d installing Standard assets for Linux/Ubuntu

I have installed Unity 3d on my Linux system.I have downloaded the Window version of the standard assets (.exe) since there is no option for installation in Linux, I tried installing the Standard assets(.exe) through wine... but im getting an error that unity requires windows 7 or more... But since this is Linux i cant help it.Is there any other way?
You can't expect .exe program to work on Linux out of the Box without the help of visual machine or some other software such as Wine. You don't even need the exe program to install the Standard Assets. You can get it directly from the Asset store from your Linux.
It's recommended that you use other OS at this time because the Linux version of Unity is still in experimental mode and you may have problems with it in the future.
You just download unity using the following link,
Unity 5.1 for Linux
It will contains standard asset also. Don't forget to select standard assets while installing.

Deploy to Linux

Background:
Im using QT and have visual studio 2012 as my IDE (used the QT plugin for visual studio).
And finally the whole project is done. However due to my .NET background I have no experience when it comes to deploying my project so it can be run on Linux.
Question:
Anyone knowing how to deploy a QT project made in visual studio to linux?
You should install Linux and prepare a Qt development environment on it.You can then copy your project there, compile it and see the results in the real environment. This way you can cope with the minor differences when porting from one OS to another easily.
So don't think of cross compiling your app for Linux on Windows. From a complexity point of view, I think setting up a Linux machine (VM or not) and the necessary environment for Qt is a whole lot simpler than cross compiling bug hunting afterwards. After all you will need a real target environment to finally test your application.
Before you can deploy something you have to compile it for that platform, and here you have two main choiches: either you cross-compile which means you compile it on windows using a set of tools so that your software is built to run on a linux, or you get a linux machine, you copy your entire project over and let Qt for linux do the magic.
Once you have your working binary compiled on linux or for linux then you start thnking about deployoment.
If you really want to be fully linux-compatible and "linux-ally correct" you should distribute your source-code precooked using some tools like "automake" that will make it possible to linux users to compile it on any linux version.
If you do not want to release your source code, you technically can distribute binaries without source code (not sure if you will be ok with licenses) but you have to be aware that there is no standard in linux for distributing binary packages, there are at least 2 main package building standards that are the ubuntu/debian style and red hat (and friends) style.
You are going to find plenty of documentation about all this stuff from cross-compile to automake and of course building debian packages and building red hat rpm packages.

Where can I find binarycreator in QT sdk for creating Qt Installer

I am creating Qt Installer for some QT application, When I gone through the Qt Installer Framework Manual at some point I found to rum binarycreator please see the image , but I am unable to find that binary file in Qt SDK, Please can any one help for this.
You can either build the Qt Installer Framework yourself following instructions from here, or download pre-built binaries for it from the official releases page, as specified in this wiki page.
Once installed or built, binarycreator is found in the 'bin' directory, e.g. E:\QtIFW2.0.1\bin.
My guess is that <location-of-ifw> means the Location of the Installer Framework, so that binary file must be part of the Installer Framework rather than the Qt SDK

Resources