On Mon, 22 Nov 2021, ilya Basin wrote:

Hi List.
I'm making a program with plugins as shared libraries and when I run `make 
check` I want my program to load the uninstalled plugins using lt_dlopen().

I expected that passing `-dlopen libname.la` to libtool would force the generation of a wrapper script setting the proper LD_LIBRARY_PATH (just like regular linking with a shared .la does). However, an ELF binary is generated and and attempt to call lt_dlopen("libname.la") fails with "File not found". It only succeeds if the filename contains "./.libs/". What am I doing wrong?

I am not sure what the correct answer is. Normally loadable modules do not have "lib" prefixes and so normally one does not use a "lib" prefix in conjunction with -module. Use of "lib" prefixes is for shared libraries indended to be linked with using a linker (for software compilation).

When libtool builds shared libraries and modules, it puts them in a ".libs" subdirectory. The ".la" file in the build directory should be enough for libltdl to load the module from the hidden ".libs" subdirectory. When the module is installed, the a new ".la" file is created which is correct for the installed form, and the module may be re-linked while being installed.

Feel free to look at GraphicsMagick (http://www.GraphicsMagick.org/) source code for ideas. GraphicsMagick uses lots of modules and its test suite works without installing the software. It does not use libltdl's static-module "preloaded" feature.

Bob
--
Bob Friesenhahn
bfrie...@simple.dallas.tx.us, http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer,    http://www.GraphicsMagick.org/
Public Key,     http://www.simplesystems.org/users/bfriesen/public-key.txt

Reply via email to