/usr/bin/ld: cannot find /usr/lib/x86_64-linux-gnu/libQt5Multimedia.so: No such file or directory

 Probably deleted by your commands earlier, just reinstall libqt5multimedia-dev.

On Sun, Apr 21, 2024 at 11:40 PM umbertofilippo <umbertofilippo@tiscali.it> wrote:

Sorry for messing things up.

I noticed the right command for the symlink was `sudo ln -s /home/umberto/miniforge3/envs/memory/lib/python3.12/site-packages/PyQt5/QtMultimedia.abi3.so /usr/lib/x86_64-linux-gnu/libQtMultimedia.so` (not "libQt5Multimedia.so", removed the "5").

Trying to rebuild again with this I got:

```

/usr/bin/ld: cannot find /usr/lib/x86_64-linux-gnu/libQt5Multimedia.so: No such file or directory
collect2: error: ld returned 1 exit status
make: *** [Makefile:210: memory] Error 1

```

Sorry for the confusion.

Umberto

On 4/21/24 18:35, umbertofilippo wrote:

Hello again,


I gave it a try.

I found the QtMultimedia.abi.so file in the folder /home/umberto/miniforge3/envs/memory/lib/python3.1/site-packages/PyQt5 (I am using a virtual Python environment created with mamba, similar to conda).

I created the symlink with `sudo ln -s /home/umberto/miniforge3/envs/memory/lib/python3.12/site-packages/PyQt5/QtMultimedia.abi3.so /usr/lib/x86_64-linux-gnu/libQt5Multimedia.so`. After this, I checked that /usr/lib/x86_64-linux-gnu/libQt5Multimedia.so points to /home/umberto/miniforge3/envs/memory/lib/python3.12/site-packages/PyQt5/QtMultimedia.abi3.so by following the symlink and everything seems fine so far.

I then tried to re-build with `pyqtdeploy-build memory.pdt`, then cs to build- directory, `qmake` and `make`.

I came back to the error I had before this:

```

/usr/bin/ld: cannot find -lQtMultimedia: No such file or directory
collect2: error: ld returned 1 exit status
make: *** [Makefile:210: memory] Error 1

```

I sincerely don't know at this point what I am supposed to do, and I did not think it wold be this complicated.

Is it because I am using a virtual environment maybe?


Thanks,

Umberto


On 4/21/24 12:31, Charles wrote:
That means instead of QtMultimedia.so from Qt, it wants to link with QtMultimedia.abi3.so from PyQt5 package instead, so you should find where that file is located then create symlink from QtMultimedia.so to it.

On Sun, Apr 21, 2024 at 5:16 PM umbertofilippo <umbertofilippo@tiscali.it> wrote:

Thank you Charles,


I symlinked the file, and now I am receiving yet another error:


`/usr/bin/ld: pyqtdeploy_main.o:(.data.rel+0x28): undefined reference to `PyInit_QtMultimedia'`


I am (again) a bit stuck at this point, a google search of "PyInit_QtMultimedia" gave no results...

But I am confident that slowly but steadily, error by error, I will be able to eventually build the application!

Of course, if it wasn't for the support of this mailing list, I would not be so optimist :)


Umberto


On 4/20/24 15:57, Charles wrote:
-lQtMultimedia means that you are linking with QtMultimedia.so.

The first thing you do is check is your /usr/lib directory whether that file exists: cd /usr/lib && find | grep -i qtmultimedia

Then if the file is not found, you check the list of files your qtmultimedia5-dev package has. You'll see that it has Qt5Multimedia.so.

So then what you need to do is just symlink it

ln -s /usr/lib/x86_64-linux-gnu/libQt5Multimedia.so /usr/lib/x86_64-linux-gnu/libQtMultimedia.so

On Sat, Apr 20, 2024 at 8:21 PM umbertofilippo <umbertofilippo@tiscali.it> wrote:

Hi KC and thanks again for your suopport!


I have included it in my toml file, then tried to build the project and I got the error: "Project ERROR: Unknown module(s) in QT: multimedia linux"


I then googled and understood I might need to install QtMultimedia on my system (Linux Mint 20).

I then did `sudo apt install qtmultimedia5-dev libqt5multimedia5 libqt5multimedia5-plugins` (not sure if all were necessary), and now during the make command I receive a new error:


```

/usr/bin/ld: cannot find -lQtMultimedia: No such file or directory
collect2: error: ld returned 1 exit status
make: *** [Makefile:210: memory] Error 1

```


I tried to find out how to solve the problem but after some search I could figure it out.

I guess it still has to do with some missing components, but I could not find the proper page with a list of all the needed libraries.


Do you or anyone else has it?


Thanks again for your time, really appreciated


Umberto


On 4/20/24 11:32, Kaiser Chief wrote:
Hi umbertofilippo,

The non-standard python packages should be added to the `sysroot.toml` first.

In fact, there should be a `PyQt5` block in your `sysroot.toml`. (The component plugin for PyQt5 will work there). Look at the `Pyqt5.Linux` section and add QtMultimedia to the list of modules (QtWidgets should already be there for instance). 

Then reload your .pdt and it should automatically detect QtMultimedia which you can tick. 

I have checked your python source code and it does not seem that you need any other dependency so you can ghead with this change and build. 

Best regards, 

KC


On Fri, 19 Apr 2024, 17:16 umbertofilippo, <umbertofilippo@tiscali.it> wrote:

Hello everyone,


I finally had some time to come back to this.

I tried to build my own application (a simple memory game, whose source you can find here: https://github.com/umbe1987/memory).

Host Linux-64 and target Linux-64.

The deployment process seemed smooth, however when I try to launch my application in the build-linux-64 directory, I see this error:


```

Traceback (most recent call last):
  File "memory.py", line 6, in <module>
  File "bootstrap-3.11.0.py", line 1178, in _find_and_load
  File "bootstrap-3.11.0.py", line 1142, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'PyQt5.QtMultimedia'

```

I went back to the .pdt file (`pyqtdeploy-build memory.pdt`), but in the Packages tab I cannot see QtMultimedia listed anywhere.

I could try to add it manually in the memory.pdt file, but I was wondering if I am doing anything wrong.

I am sharing the content of my pdt file below.

Many thanks in advance if you wish to help.


Umberto


memory.pdt

```

version = 0
sysroot = ""
sysroots_dir = ""
parts = [ "Python:random", "PyQt:PyQt5.QtWidgets", "Python:glob", "Python:os", "PyQt:PyQt5.QtCore", "PyQt:PyQt5.QtGui", "SIP:PyQt5.sip", "PyQt:PyQt5",]

[Application]
entry_point = ""
is_console = false
is_bundle = false
name = ""
qmake_configuration = ""
script = "memory.py"
syspath = ""

[Application.Package]
name = "data"
exclude = [ "*.pyc", "*.pyd", "*.pyo", "*.pyx", "*.pxi", "__pycache__", "*-info", "EGG_INFO", "*.so",]
[[Application.Package.Content]]
name = "back.jpg"
included = true
is_directory = false

[[Application.Package.Content]]
name = "img"
included = true
is_directory = true
[[Application.Package.Content.Content]]
name = "analisiapprofondita.jpg"
included = true
is_directory = false

[[Application.Package.Content.Content]]
name = "cagnaccioselvaggio.jpg"
included = true
is_directory = false

[[Application.Package.Content.Content]]
name = "diamanteocchidileone.jpg"
included = true
is_directory = false

[[Application.Package.Content.Content]]
name = "lameraviglia.jpg"
included = true
is_directory = false

[[Application.Package.Content.Content]]
name = "leggedelpiuforte.jpg"
included = true
is_directory = false

[[Application.Package.Content.Content]]
name = "lucertolacrogiolante.jpg"
included = true
is_directory = false

[[Application.Package.Content.Content]]
name = "ricercaossessiva.jpg"
included = true
is_directory = false

[[Application.Package.Content.Content]]
name = "ruggitodelwurm.jpg"
included = true
is_directory = false

[[Application.Package.Content.Content]]
name = "studioaccurato.jpg"
included = true
is_directory = false

[[Application.Package.Content.Content]]
name = "Tropicalisland.jpg"
included = true
is_directory = false

[[Application.Package.Content.Content]]
name = "wurmarrogante.jpg"
included = true
is_directory = false


[[Application.Package.Content]]
name = "sound"
included = true
is_directory = true
[[Application.Package.Content.Content]]
name = "end.wav"
included = true
is_directory = false

[[Application.Package.Content.Content]]
name = "fail.wav"
included = true
is_directory = false

[[Application.Package.Content.Content]]
name = "success.wav"
included = true
is_directory = false

```

On 3/12/24 08:48, umbertofilippo wrote:

Thanks Charles and KC!


I was finally able to build the demo after installing all the Qt for X11 requirements for Linux!!!


For the records, here is what I had to install on my machine (Linux Mint 21):

Note: there is a package in the list of requirements which has a missing match on my system, I am marking it down below:


sudo apt-get install libxcb-util-dev
sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxkbcommon-dev libxkbcommon-x11-dev libxcb-xinerama0-dev # instead of "libxcd-xinerama-dev"


Now, on my application and then Android! ;)


On 3/9/24 20:47, Umberto Minora wrote:
Thanks for the hint Charles, I will try to test the solution as soon as I can and report back on the result.

As far as I understand, I should do "sudo apt-get install libxcb-util-dev" as explained in https://forum.qt.io/topic/125582/qt-5-15-2-do-not-build-libqxcb-so-but-at-the-same-time-qt-5-14-0-successfully-build-libqxcb-so/4?_=1710013170647&lang=it and run "build-demo.py" again.

Will be back soon.

Umberto

Il 9 mar 2024 15:48, Charles <peacech@gmail.com> ha scritto:
Do you have libxcb.so platform plugin in your qt directory?

If not you need to rebuild qt again, make sure that requirements listed at https://doc.qt.io/qt-5/linux-requirements.html are installed and make sure the xcb platform plugin is built.

On Sat, Mar 9, 2024 at 8:38 PM umbertofilippo <umbertofilippo@tiscali.it> wrote:

Hello everyone,


just a quick update: I did the KC's three lines trick and it did the job.

I am now stuck at yet another error, which is

Generating the Makefiles...
/home/umberto/games/python/pyqt-demo/sysroot-linux-64/Qt/bin/qmake -recursive PyQt5.pro
sip-install: '/home/umberto/games/python/pyqt-demo/sysroot-linux-64/Qt/bin/qmake -recursive PyQt5.pro' failed returning 3
Info: creating stash file /tmp/tmphwkq3ix1/.qmake.stash
Reading /tmp/tmphwkq3ix1/QtCore/QtCore.pro
Reading /tmp/tmphwkq3ix1/QtNetwork/QtNetwork.pro
Reading /tmp/tmphwkq3ix1/QtGui/QtGui.pro
Reading /tmp/tmphwkq3ix1/QtWidgets/QtWidgets.pro
Reading /tmp/tmphwkq3ix1/QtX11Extras/QtX11Extras.pro
Project ERROR: Unknown module(s) in QT: x11extras
pyqtdeploy-sysroot: execution of 'sip-install' failed: returned exit code 1


I am attaching the whole log again in case it's useful to better understand what went wrong.


Any idea how to move on from here?


Sorry for spamming but I hope this thread not only will fix my issues but also will serve as a reference for building with a Linux machine (or me and for others hopefully).


Umberto


On 3/8/24 20:32, Kaiser Chief wrote:
Hi,

"qt-everywhere-opensource-src-5.15.10.tar.xz" is the right file you are looking for.

Unfortunately, "pyqtdeploy/sysroot/plugins/Qt.py" is looking for 'qt-everywhere-src-{}.tar.xz'

You could fix that line (#53) in "pyqtdeploy/sysroot/plugins/Qt.py"with:
` qt-everywhere-opensource-src-{}.tar.xz `

However, you might encounter problems down the line probably...

I would recommend to stick with Qt5.15.2 and do necessary changes.
Alternatively, you could built qt-everywhere-opensource-src-5.15.10.tar.xz from source manually and tell pyqtdeploy where to look for Qt install (but that's a bit more painful).


Best regards,

KC

Le ven. 8 mars 2024 à 19:21, umbertofilippo <umbertofilippo@tiscali.it> a écrit :

Thanks again for the feedback,


I have just tried to update the sysroot.toml like this:


# Qt ##########################################################################

[Qt]
version = "5.15.10" # original was "5.15.2"
edition = "opensource"

and now it seems the link to download the qt source can no longer be found.


Qt: installing component...
Qt: looking for 'qt-everywhere-src-5.15.10.tar.xz' in /home/umberto/games/python/pyqt-demo.
Qt: downloading 'qt-everywhere-src-5.15.10.tar.xz' from https://download.qt.io/archive/qt/5.15/5.15.10/single/...
Qt: 'https://download.qt.io/archive/qt/5.15/5.15.10/single/qt-everywhere-src-5.15.10.tar.xz' was not found.
pyqtdeploy-sysroot: Qt: unable to find '/home/umberto/.pyqtdeploy/cache/qt-everywhere-src-5.15.10.tar.xz'.


The only similar thing I can see in https://download.qt.io/archive/qt/5.15/5.15.10/single/ is "qt-everywhere-opensource-src-5.15.10.tar.xz"


If there is no easy way to solve this you can think of I will probably try to test adding those 3 lines to qtbase/src/corelib/global/qglobal.h


Thanks again so much for your kind and feedback, much appreciated!


Umberto


On 3/8/24 19:38, Kaiser Chief wrote:
To complement Charles' answer, it seems like someone found a quick fix with GCC11, in case you are reluctant to move back to GCC10: https://forum.qt.io/topic/136672/error-installing-qt-everywhere-src-5-15-2-on-ubuntu-22-04/2

add these 3 lines at the top of qtbase/src/corelib/global/qglobal.h : (I haven't tested that)
```
#ifdef __cplusplus
#include <limits>
#endif
```

For ref, the QT bug associated is: https://bugreports.qt.io/browse/QTBUG-90395
It has been fixed for QT5.15.9, but since you are using the default QT5.15.2, well it's not fixed.

Best regards,

KC

Le ven. 8 mars 2024 à 18:28, Charles <peacech@gmail.com> a écrit :
With C++ the relevant error is the first error line, the rest is usually noise. If you google gcc numeric_limits is not a class template you will find https://bugs.gentoo.org/768342

If you use gcc 11 then use gcc 10 otherwise patch qt headers as in https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=92d54be896563102786238893a9c645b8bdb43ef

On Sat, Mar 9, 2024 at 12:49 AM umbertofilippo <umbertofilippo@tiscali.it> wrote:

Moving on,


I have tried to remove OpenSSL from the "sysroot.toml" since it is not required, and now the process seems to go further, but I am stuck at a new error:


Verifying host architecture 'linux-64'...
Verifying target architecture 'linux-64'...
zlib: verifying...
Qt: verifying...
Python: verifying...
SIP: verifying...
PyQt: verifying...
PyQt3D: verifying...
PyQtChart: verifying...
PyQtDataVisualization: verifying...
PyQtNetworkAuth: verifying...
PyQtPurchasing: verifying...
QScintilla: verifying...
zlib: installing component...
Qt: installing component...
Qt: downloading 'qt-everywhere-src-5.15.2.tar.xz' from https://download.qt.io/archive/qt/5.15/5.15.2/single/...
pyqtdeploy-sysroot: execution of './configure' failed: returned exit code 2


What can be the cause of this new error? I see there is a new folder now in the original pyqt demo directory called "sysroot-linux-64" and inside I see there's "sysroot-linux-64/build/qt-everywhere-src-5.15.2" with a "configure" file, but other than this I have no clue sincerely on why it is failing.


I have attached the content of running build-demo.py with --verbose


Hope someone can help me. Thanks.


On 3/8/24 12:18, umbertofilippo wrote:

Hi and many thanks for you feedback!


First of all let me tell that I am very interested in finding a solution to this problem, and I will try to do my best if I can contribute in case it's needed.


I just checked, and this is what I can see in my /usr/include/openssl/opensslv.h file. Cannot tell though if pyqtdeploy is supposed to work or not given these lines...


/*
 * SECTION 4: BACKWARD COMPATIBILITY
 */

# define OPENSSL_VERSION_TEXT "OpenSSL 3.0.2 15 Mar 2022"

/* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */
# ifdef OPENSSL_VERSION_PRE_RELEASE
#  define _OPENSSL_VERSION_PRE_RELEASE 0x0L
# else
#  define _OPENSSL_VERSION_PRE_RELEASE 0xfL
# endif
# define OPENSSL_VERSION_NUMBER          \
    ( (OPENSSL_VERSION_MAJOR<<28)        \
      |(OPENSSL_VERSION_MINOR<<20)       \
      |(OPENSSL_VERSION_PATCH<<4)        \
      |_OPENSSL_VERSION_PRE_RELEASE )

# ifdef  __cplusplus
}
# endif

# include <openssl/macros.h>
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define HEADER_OPENSSLV_H
# endif

#endif    


Umberto


On 3/7/24 19:11, Kaiser Chief wrote:
Hi,

To complement my previous message (and after doing a quick search through the source code):
* The script "OpenSSL.py" is looking for "OPENSSL_VERSION_NUMBER" in "/usr/include/openssl/opensslv.h"
* In OpenSSL 1.1.1 (which is installed on my Linux), I can see the line "#define OPENSSL_VERSION_NUMBER" in  "/usr/include/openssl/opensslv.h".

Can you check that you have that line in your header file too?

If not, it's probably that OpenSSL updated their header files and put the VERSION_NUMBER somewhere else...

If you want to run the demo, I would recommend you install the default versions as written in the `sysroot.toml`

If there are fixes to make for each "version grepping", I believe that Phil had a way to contribute to plugins for pyqtdeploy, but can't remember where...

Best regards,

KC

Le jeu. 7 mars 2024 à 17:56, Kaiser Chief <kaiser.chiefmail@gmail.com> a écrit :
Hi,

According to the sysroot help page (https://www.riverbankcomputing.com/static/Docs/pyqtdeploy/sysroot.html#openssl), if you have configured your `sysroot.toml` like this:
```
[OpenSSL.linux]
version = ""
install_from_source = false
```

Then, on Linux, the OpenSSL library used will be the one installed on your OS with no assumption on the version (so that should work in your example).
Now, that's what is provided in the demo folder for `pyqtdeploy-3.3.0`, so that's odd.

Therefore, it could be that the `pyqtdeploy-sysroot` functionality is struggling to extract the version number from your OS-installed OpenSSL.

---

I am not of great help with that comment, however, I would like to suggest, if it's your first time with pyqtdeploy to give a try at my Github repo:

https://github.com/achille-martin/pyqt-crom

This repo aims at demonstrating how beginner devs, intermediate devs and expert devs can benefit from pyqtdeploy.
It also offers a few simple tutorials to get started with pyqtdeploy (simpler than the demo in the official pyqtdeploy package) and optimises bits of the tool regarding the user interface (for now).

I can support you with your initial journey on discovering pyqtdeploy through my repo if you wish.

Best regards,

KC

Le jeu. 7 mars 2024 à 17:06, umbertofilippo <umbertofilippo@tiscali.it> a écrit :
Hello everyone, first time here for me :)


I was giving pyqtdeploy a try and I am stuck at the very first step of
the "Building the Demo" page.


I am on a Linux-64 machine. I am following the tutorial at
https://www.riverbankcomputing.com/static/Docs/pyqtdeploy/demo.html and
I have downloaded the demo files from
https://files.pythonhosted.org/packages/44/d4/978017382f0ecc48601944c3fc0f58a5c5075a1d3acd48d09c11ee471b05/pyqtdeploy-3.3.0.tar.gz


I have created a virtual python environment with the following packages
and versions installed:

Name,Version
_libgcc_mutex,0.1
_openmp_mutex,4.5
bzip2,1.0.8
ca-certificates,2024.2.2
ld_impl_linux-64,2.40
libexpat,2.6.1
libffi,3.4.2
libgcc-ng,13.2.0
libgomp,13.2.0
libnsl,2.0.1
libsqlite,3.45.1
libuuid,2.38.1
libxcrypt,4.4.36
libzlib,1.2.13
ncurses,6.4
openssl,3.2.1
pip,24.0
pyqt5,5.15.10
pyqt5-qt5,5.15.2
pyqt5-sip,12.13.0
pyqtdeploy,3.3.0
python,3.12.2
readline,8.2
setuptools,69.1.1
tk,8.6.13
toml,0.10.2
tzdata,2024a
wheel,0.42.0
xz,5.2.6

I have tried to run the command "python build-demo.py" straight away,
but I am getting the following error:

OpenSSL: verifying...
OpenSSL: determining installed version from
'/usr/include/openssl/opensslv.h'.
pyqtdeploy-sysroot: OpenSSL: unable to extract the version number.


OpenSSL is installed on my machine and the result of doing "openssl
version" is "OpenSSL 3.2.1 30 Jan 2024 (Library: OpenSSL 3.2.1 30 Jan 2024)"


Am I supposed to install the exact versions of all the components found
in the ""sysroot.toml" file to be able to run "python build-demo.py"
successfully?


Thanks,


Umberto