All,

Been looking for a discussion forum where I could search because this had to have come up before. It appears lt_dlopen() uses straight dlopen() for additional library loads instead of using itself and the user search path. Admittedly this could be user error, but so far the documentation doesn't point to that. I'm going by the doc found here:

https://www.gnu.org/software/libtool/manual/

RPATH isn't allowed in secured environments. The .conf file has been a legacy Qt bug since 4.x and probably earlier. It is definitely still there. They used to hack in an RPATH to get around the local build problem. Actually they hacked it into the system installed builds too, but that has all been fixed. I will eventually use SDL3 as the base for this, completely removing the plugins.

The fork of Qt begat Copperspice begat LsCs is here

https://github.com/RolandHughes/ls-cs/tree/ls-cs-0.2.1

If people wish to look at source, the file in question is ls-cs/src/core/plugin/qlibrary_unix.cpp. I'm currently only working in Ubuntu 18.04 so the shell scripts for RPM and other platforms probably are no longer correct.

In the code starting at 192 I insert the the prefixed library and plugin paths gleaned from

developer@developer-u18-VirtualBox:~/github_projects/LsCs_local_release$ cat share/LsCs/lscs.conf
[Paths]
Prefix = /home/developer/github_projects/LsCs_local_release
Headers = include/LsCs
Libraries = lib/LsCs
Binaries = bin
Plugins = lib/LsCs/plugins
Data = share/LsCs
Translations = share/LsCs/translations

At line 264 I call lt_dlopen. (Sorry, I did not clean up all of the dlopen and flags stuff yet. Trying to get this to work first.) Oh, the lt_dlinit() call is at line 98 and lt_dlexit() is at 323.

For decades now Qt and the forks of it have had this tree structure.

developer@developer-u18-VirtualBox:~/github_projects/LsCs_local_release$ tree lib
lib
└── LsCs
    ├── cmake
    │   ├── LsCsBinaryTargets.cmake
    │   ├── LsCsBinaryTargets-debug.cmake
    │   ├── LsCsConfig.cmake
    │   ├── LsCsConfigVersion.cmake
    │   ├── LsCsLibraryTargets.cmake
    │   ├── LsCsLibraryTargets-debug.cmake
    │   └── LsCsMacros.cmake
    ├── libLsCsCore.so -> libLsCsCore.so.0
    ├── libLsCsCore.so.0 -> libLsCsCore.so.0.2.1
    ├── libLsCsCore.so.0.2.1
    ├── libLsCsGui.so -> libLsCsGui.so.0
    ├── libLsCsGui.so.0 -> libLsCsGui.so.0.2.1
    ├── libLsCsGui.so.0.2.1
    ├── libLsCsMultimedia.so -> libLsCsMultimedia.so.0
    ├── libLsCsMultimedia.so.0 -> libLsCsMultimedia.so.0.2.1
    ├── libLsCsMultimedia.so.0.2.1
    ├── libLsCsNetwork.so -> libLsCsNetwork.so.0
    ├── libLsCsNetwork.so.0 -> libLsCsNetwork.so.0.2.1
    ├── libLsCsNetwork.so.0.2.1
    ├── libLsCsOpenGL.so -> libLsCsOpenGL.so.0
    ├── libLsCsOpenGL.so.0 -> libLsCsOpenGL.so.0.2.1
    ├── libLsCsOpenGL.so.0.2.1
    ├── libLsCsSql.so -> libLsCsSql.so.0
    ├── libLsCsSql.so.0 -> libLsCsSql.so.0.2.1
    ├── libLsCsSql.so.0.2.1
    ├── libLsCsSvg.so -> libLsCsSvg.so.0
    ├── libLsCsSvg.so.0 -> libLsCsSvg.so.0.2.1
    ├── libLsCsSvg.so.0.2.1
    ├── libLsCsXcbSupport.so -> libLsCsXcbSupport.so.0
    ├── libLsCsXcbSupport.so.0 -> libLsCsXcbSupport.so.0.2.1
    ├── libLsCsXcbSupport.so.0.2.1
    ├── libLsCsXmlPatterns.so -> libLsCsXmlPatterns.so.0
    ├── libLsCsXmlPatterns.so.0 -> libLsCsXmlPatterns.so.0.2.1
    ├── libLsCsXmlPatterns.so.0.2.1
    ├── libLsCsXml.so -> libLsCsXml.so.0
    ├── libLsCsXml.so.0 -> libLsCsXml.so.0.2.1
    ├── libLsCsXml.so.0.2.1
    ├── libltdl.a
    ├── libltdl.la
    ├── libltdl.so -> libltdl.so.7.3.3
    ├── libltdl.so.7 -> libltdl.so.7.3.3
    ├── libltdl.so.7.3.3
    ├── LsCsPrinterDriverCups.so
    └── plugins
        ├── imageformats
        │   └── LsCsImageFormatsSvg.so
        ├── mediaservices
        │   ├── LsCsMultimedia_gst_audiodecoder.so
        │   ├── LsCsMultimedia_gst_camerabin.so
        │   └── LsCsMultimedia_gst_mediaplayer.so
        ├── platforms
        │   └── LsCsGuiXcb.so
        ├── playlistformats
        │   └── LsCsMultimedia_m3u.so
        ├── sqldrivers
        │   ├── LsCsSqlMySql.so
        │   ├── LsCsSqlOdbc.so
        │   └── LsCsSqlPsql.so
        └── xcbglintegrations
            └── LsCsGuiXcb_Glx.so

so they either hack with RPATH or they use a "deployqt"-like script that copies all of the object libraries and all of the plugins into a single directory with the executable you wrote.

Even when you do the "script hack"

developer@developer-u18-VirtualBox:~/github_projects/LsCs_examples_install/gui-hello$ cat g.sh
#!/bin/bash
#
export LD_LIBRARY_PATH="/home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins:/home/developer/github_projects/LsCs_local_release/lib/LsCs" export LTDL_LIBRARY_PATH="/home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins:/home/developer/github_projects/LsCs_local_release/lib/LsCs" export LT_LIBRARY_PATH="/home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins:/home/developer/github_projects/LsCs_local_release/lib/LsCs"

./gui-hello


you still end up with a stack dump because it is using dlopen for all of the dependencies, or at least it appears to be.

developer@developer-u18-VirtualBox:~/github_projects/LsCs_examples_install/gui-hello$ ./g.sh
QSettings:
     key:  Paths/Binaries    value:  bin
     key:  Paths/Data    value:  share/LsCs
     key:  Paths/Headers    value:  include/LsCs
     key:  Paths/Libraries    value:  lib/LsCs
     key:  Paths/Plugins    value:  lib/LsCs/plugins
     key:  Paths/Prefix    value: /home/developer/github_projects/LsCs_local_release
     key:  Paths/Translations    value:  share/LsCs/translations
pluginKey:   xcb
QFactoryLoader::setup()  libDirs: (/home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/xcbglintegrations, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/xcbglintegrations/LsCsGuiXcb_Glx.so, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/sqldrivers, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/sqldrivers/LsCsSqlOdbc.so, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/sqldrivers/LsCsSqlMySql.so, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/sqldrivers/LsCsSqlPsql.so, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/mediaservices, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/mediaservices/LsCsMultimedia_gst_audiodecoder.so, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/mediaservices/LsCsMultimedia_gst_camerabin.so, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/mediaservices/LsCsMultimedia_gst_mediaplayer.so, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/playlistformats, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/playlistformats/LsCsMultimedia_m3u.so, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/imageformats, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/imageformats/LsCsImageFormatsSvg.so, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/platforms, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/platforms/LsCsGuiXcb.so, /home/developer/github_projects/LsCs_examples_install/gui-hello, /home/developer/github_projects/LsCs_local_release/lib/LsCs, /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins) looking for: /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/platforms/LsCsGuiXcb.so lscs_findLibrary() looking for: /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/platforms/LsCsGuiXcb.so
prefixStr:     /home/developer/github_projects/LsCs_local_release
librariesStr: /home/developer/github_projects/LsCs_local_release/lib/LsCs
pluginsStr: /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins search path after changes: /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins:/home/developer/github_projects/LsCs_local_release/lib/LsCs search path: /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins:/home/developer/github_projects/LsCs_local_release/lib/LsCs attempt: /home/developer/github_projects/LsCs_local_release/lib/LsCs/plugins/platforms/LsCsGuiXcb.so
./g.sh: line 7: 29748 Segmentation fault      (core dumped) ./gui-hello

So, is there a legitimate non-RPATH work around for this?

Is there an lt_ library function I have not found which will give me a list of all dependencies for a given .so so those can be loaded first?

Thanks,

--
Roland Hughes, President
Logikal Solutions
(630)-205-1593  (cell)
https://theminimumyouneedtoknow.com
https://infiniteexposure.net
https://johnsmith-book.com


  • ... Roland Hughes via Discussion list for the GNU libtool shared library maintenance tool
    • ... Ileana Dumitrescu

Reply via email to