Qt build version from shared object - c++

Suppose I have an executable that uses qt library. I want to replace the shared object with a custom one. So how do I find the qt version so that I can build it myself from source?
P.S. All the files has names like libQt5**.so.5.

If you don't own a very special setup the exact version is part of the lib name; all others are symlinks. E. g. installed here is Qt 4.8.1:
$ ls -l /usr/lib/i386-linux-gnu/libQtCore.*
-rw-r--r-- 1 root root 680 Mai 27 2015 /usr/lib/i386-linux-gnu/libQtCore.prl
lrwxrwxrwx 1 root root 18 Mai 27 2015 /usr/lib/i386-linux-gnu/libQtCore.so -> libQtCore.so.4.8.1
lrwxrwxrwx 1 root root 18 Mai 27 2015 /usr/lib/i386-linux-gnu/libQtCore.so.4 -> libQtCore.so.4.8.1
lrwxrwxrwx 1 root root 18 Mai 27 2015 /usr/lib/i386-linux-gnu/libQtCore.so.4.8 -> libQtCore.so.4.8.1
-rw-r--r-- 1 root root 2,9M Mai 27 2015 /usr/lib/i386-linux-gnu/libQtCore.so.4.8.1
Additionally the libs provide macros and functions to access the version at build and run time: QT_VERSION, QT_VERSION_STR and qVersion().

Related

Kdevelop 5 + kdev-control-flow-graph

I successfully build and installed kdev-control-flow-graph plugin after forking from sandsmark/kdev-control-flow-graph into my own fljx/kdev-control-flow-graph branch with minimal changes.
When I try to enable kdev-control-flow-graph view, though, I receive the error below:
"Unable to create a KGraphViewer instance, please verify that a compatible version is installed."
I am running on Kubuntu 16.04 with KDevelop 5.1.1 and kgraphviewer is installed:
# apt search kgraphviewer
Sorting... Pronto
Full Text Search... Pronto
kgraphviewer/xenial,now 4:2.1.90-0ubuntu2 amd64 [installed]
GraphViz dot graph viewer
kgraphviewer-dbg/xenial 4:2.1.90-0ubuntu2 amd64
GraphViz dot graph viewer for KDE 4 debug files
kgraphviewer-dev/xenial,now 4:2.1.90-0ubuntu2 amd64 [installed]
GraphViz dot graph viewer - devel files
libkgraphviewer2/xenial,now 4:2.1.90-0ubuntu2 amd64 [installed]
GraphViz dot graph viewer - libs
Then I build KGraphViewer from github and my system now has:
# find /usr -iname "*kgraphviewer*.so*" -ls
10571222 0 lrwxrwxrwx 1 root root 22 Ago 14 2015 /usr/lib/libkgraphviewer.so.2 -> libkgraphviewer.so.2.1
10571221 712 -rw-r--r-- 1 root root 728288 Ago 14 2015 /usr/lib/libkgraphviewer.so.2.1
10558158 2868 -rw-r--r-- 1 root root 2935024 Ago 17 16:32 /usr/lib/x86_64-linux-gnu/libkgraphviewer.so.3
11170876 0 lrwxrwxrwx 1 root root 57 Ago 17 16:37 /usr/lib/x86_64-linux-gnu/qt5/plugins/kdevplatform/27/kgraphviewerpart.so -> /usr/lib/x86_64-linux-gnu/qt5/plugins/kgraphviewerpart.so
10748549 180 -rw-r--r-- 1 root root 181312 Ago 17 16:32 /usr/lib/x86_64-linux-gnu/qt5/plugins/kgraphviewerpart.so
10558159 0 lrwxrwxrwx 1 root root 20 Ago 17 16:33 /usr/lib/x86_64-linux-gnu/libkgraphviewer.so -> libkgraphviewer.so.3
10571223 60 -rw-r--r-- 1 root root 60392 Ago 14 2015 /usr/lib/kde4/kgraphviewerpart.so
10571224 0 lrwxrwxrwx 1 root root 20 Ago 14 2015 /usr/lib/libkgraphviewer.so -> libkgraphviewer.so.2
Could anybody please give me any hints on how to make my plugin correctly find KGraphViewer KPart?
Thanks in advance.
KDE dev reporting in.
KGraphViewer is embedded into other applications using KParts framework. Porting KGraphViewer's KPart to Qt5/KF5 is near to release. The bad news is that kdev-control-flow-graph don't work with new KGraphViewer, so this plugin needs to be updated too.

Undefined reference in libpangoft2

Recently I've installed GTK+ 3.22 and its dependencies:
GLib 2.50
Pango 1.40
Gdk-Pixbuf 2.36
Atk 2.22
GObject-Introspection 1.50
The installation was successful because I tried using some new features of GTK+ 3.22 in one of my Python projects and it worked. (Before the installation, if I tried using a new feature, Python would raise an exception)
I am also working on a game which is written in C++ and I'm using Cocos2d-x to create it. Before installing the above libraries, everything worked fine. After the new packages were installed, I built my game in CodeBlocks and the following error message was shown:
In file: /usr/local/lib/libpangoft2-1.0.so.0 undefined reference to 'pango_matrix_get_font_scale_factors'
After some research, I've found out from here that in Pango 1.37 the pango_matrix_get_font_scale_factors function was added which is exactly the function that my project cannot find. As mentioned above, I've installed Pango 1.40 as a requirement for GTK +3.22.
I've also tried installing libpangoft2-1.0-0 with apt-get install and the output was: libpangoft2-1.0-0 is already the newest version.
Out of curiosity I've also looked in /usr/local/lib to see if I can find the libpangoft2-1.0-0 library.
In /usr/local/lib I've ran the following command: ls -la | grep pango which gave me the following output:
-rwxr-xr-x 1 root staff 1095 Oct 30 14:08 libpango-1.0.la
lrwxrwxrwx 1 root staff 24 Oct 30 14:08 libpango-1.0.so -> libpango-1.0.so.0.4000.3
lrwxrwxrwx 1 root staff 24 Oct 30 14:08 libpango-1.0.so.0 -> libpango-1.0.so.0.4000.3
-rwxr-xr-x 1 root staff 1073136 Oct 30 14:08 libpango-1.0.so.0.4000.3
-rwxr-xr-x 1 root staff 1263 Oct 30 14:08 libpangocairo-1.0.la
lrwxrwxrwx 1 root staff 29 Oct 30 14:08 libpangocairo-1.0.so -> libpangocairo-1.0.so.0.4000.3
lrwxrwxrwx 1 root staff 29 Oct 30 14:08 libpangocairo-1.0.so.0 -> libpangocairo-1.0.so.0.4000.3
-rwxr-xr-x 1 root staff 216216 Oct 30 14:08 libpangocairo-1.0.so.0.4000.3
-rwxr-xr-x 1 root staff 1209 Oct 30 14:08 libpangoft2-1.0.la
lrwxrwxrwx 1 root staff 27 Oct 30 14:08 libpangoft2-1.0.so -> libpangoft2-1.0.so.0.4000.3
lrwxrwxrwx 1 root staff 27 Oct 30 14:08 libpangoft2-1.0.so.0 -> libpangoft2-1.0.so.0.4000.3
-rwxr-xr-x 1 root staff 397496 Oct 30 14:08 libpangoft2-1.0.so.0.4000.3
-rwxr-xr-x 1 root staff 1265 Oct 30 14:08 libpangoxft-1.0.la
lrwxrwxrwx 1 root staff 27 Oct 30 14:08 libpangoxft-1.0.so -> libpangoxft-1.0.so.0.4000.3
lrwxrwxrwx 1 root staff 27 Oct 30 14:08 libpangoxft-1.0.so.0 -> libpangoxft-1.0.so.0.4000.3
-rwxr-xr-x 1 root staff 157240 Oct 30 14:08 libpangoxft-1.0.so.0.4000.3
I tried reinstalling Pango 1.40, but the undefined reference error still persists.
I would also like to mention:
I am using Debian 8
Since installing GTK+ 3.22 my Nautilus looks like this, notice how I do not have icons (only some kind of replacement) next to the Close button and next to my HDDs (note that the black rectangles were added by me)
I am using i3 as a window manager
My question is, how can I solve the In file: /usr/local/lib/libpangoft2-1.0.so.0 undefined reference to 'pango_matrix_get_font_scale_factors' error?
Update
If I uninstall Pango 1.40 I do not get the error anymore, but GTK+ 3.22 will not work.
Update2
Maybe Pango 1.40.3 is not installed correctly. I described an interesting problem I am having here.

adding tesseract library to c++ project in xcode

I'm playing with C++ and tesseract library in mac os. I installed tesseract library with brew install tesseract.
$ tesseract --version
tesseract 3.04.00
leptonica-1.72
libjpeg 8d : libpng 1.6.20 : libtiff 4.0.6 : zlib 1.2.5
I have tesseract installed in following path,
$ ll /usr/local/Cellar/tesseract/3.04.00/
total 72
-rw-r--r-- 1 prayagupd admin 440 Jul 11 2015 AUTHORS
-rw-r--r-- 1 prayagupd admin 1007 Jul 11 2015 COPYING
-rw-r--r-- 1 prayagupd admin 9773 Jul 11 2015 ChangeLog
-rw-r--r-- 1 prayagupd admin 332 Apr 6 19:44 INSTALL_RECEIPT.json
-rw-r--r-- 1 prayagupd admin 45 Jul 11 2015 NEWS
-rw-r--r-- 1 prayagupd admin 6326 Apr 6 19:44 README
drwxr-xr-x 3 prayagupd admin 102 Aug 21 2015 bin
drwxr-xr-x 3 prayagupd admin 102 Aug 21 2015 include
drwxr-xr-x 6 prayagupd admin 204 Aug 21 2015 lib
drwxr-xr-x 4 prayagupd admin 136 Aug 21 2015 share
What I want next is add tesseract lib to a C++ project (which I created with xcode). My assumption was tesseract is available to any c++ project once installed, but I can't see imports in my c++ project. It can't find the file baseapi.h.
I am following example from here - API examples
I feel like I still need to tesseract lib to c++ project in xcode, but don't know how.
Did you try looking under "$ ll /usr/local/Cellar/tesseract/3.04.00/api/" ? At least, it is where I found it on my tesseract folder.

C++ Mongodb driver v2.2 scons install failed on Linux

I have install this driver for a long time, but failed. There is some failed infomation as following
# scons
Reading SConscript files ...
Checking for C++ library boost_thread-mt... no
Checking for C++ library boost_thread... no
# echo $LD_LIBRARY_PATH
/usr/lib:/usr/local/lib/:/usr/local/mpc/lib:/usr/local/gmp/lib:/usr/local/mpfr/lib/
# ls /usr/local/lib/libboost_thread* -l
-rw-r--r-- 1 root root 288364 Dec 28 18:16 /usr/local/lib/libboost_thread.a
lrwxrwxrwx 1 root root 40 Jan 1 13:05 /usr/local/lib/libboost_thread-mt.so -> /usr/local/lib/libboost_thread.so.1.52.0
lrwxrwxrwx 1 root root 25 Dec 28 18:10 /usr/local/lib/libboost_thread.so -> libboost_thread.so.1.52.0
-rwxr-xr-x 1 root root 186164 Dec 28 18:10 /usr/local/lib/libboost_thread.so.1.52.0
I have installed the boost v1.52, scons v2.2.0, and I want to install the mongodb C++ driver v2.2. Any Ideas? thanks very much.
The LD_LIBRARY_PATH environment variable affects where libraries are located at runtime, not at link time. The client driver SConstruct file provides an option --extrapath, which allows you to provide additional library search paths.
Try running:
scons --extrapath=/usr/local
to see if it will pick up boost libraries that you have installed in /usr/local.

mysqlclient library linkage problem

I am linking an application with mysqlclient library on 64-bit CentOS 5.4 and get a linkage error (cannot find -lmysqlclient).
The library is in /usr/lib64/mysql/:
una#localhost$ ll /usr/lib64/mysql/
total 9072
...
lrwxrwxrwx 1 root root 26 Jan 3 15:54 libmysqlclient_r.so -> libmysqlclient_r.so.15.0.0
lrwxrwxrwx 1 root root 26 Jan 3 15:54 libmysqlclient_r.so.15 -> libmysqlclient_r.so.15.0.0
-rwxr-xr-x 1 root root 1518456 Sep 4 01:28 libmysqlclient_r.so.15.0.0
lrwxrwxrwx 1 root root 24 Jan 3 15:54 libmysqlclient.so -> libmysqlclient.so.15.0.0
lrwxrwxrwx 1 root root 24 Jan 3 15:54 libmysqlclient.so.15 -> libmysqlclient.so.15.0.0
-rwxr-xr-x 1 root root 1514000 Sep 4 01:28 libmysqlclient.so.15.0.0
...
And the directory seems to be properly registered for Linux linker:
una#localhost$ cat /etc/ld.so.conf.d/mysql-x86_64.conf
/usr/lib64/mysql
The only way I can link the application on this machine is by specifying the full path to the library file which is unacceptable in my case.
What could cause the problem here?
Thanks.
-L/usr/lib64/mysql
The ld.so.conf stuff is only used at runtime, not compile time.
/usr/lib64/mysql is certainly not in your gcc's default search path. You may use a autoconf script to search for the installation path of libmysqlclient on this kind of a distribution, and dynamically use the found location with the -L flag.