libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ld scripts and libltdl


From: Madhu
Subject: ld scripts and libltdl
Date: Sun, 21 Apr 2024 11:10:14 +0530 (IST)

I'm using a program that uses libltdl (from libtool) to wrap calls to
dlopen (e.g. lt_dlopenext) and dlsym and it is utterly unable to dlopen
"standard" shared libraries.

Gentoo (probably following upstream glibc) has been putting linker
scripts where shared libraries were orignially expected.

```
$ cat /usr/lib64/libm.so
/* GNU ld script
*/
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( /lib64/libm.so.6  AS_NEEDED ( /lib64/libmvec.so.1 ) )
```

So a call to lt_dlopenext("libm"), with ltdl compiled with
-DLT_DEBUG_LOADERS, produces output like this (but lt_dlerror only
reports "File not found")

```
try_dlopen (libm, .la)
tryall_dlopen (libm.a, lt_preopen)
Calling lt_preopen->module_open (libm.a)
  Result: Failed
  Error message << file not found >>
try_dlopen (libm, .so)
tryall_dlopen (libm.a, lt_preopen)
Calling lt_preopen->module_open (libm.a)
  Result: Failed
  Error message << file not found >>
tryall_dlopen (/usr/lib64/libm.so, (ALL))
Calling lt_dlopen->module_open (/usr/lib64/libm.so)
  Result: Failed
  Error message << /usr/lib64/libm.so: invalid ELF header >>
Calling lt_preopen->module_open (/usr/lib64/libm.so)
  Result: Failed
  Error message << file not found >>
```

Only a call to lt_dlopen with the full path "/lib64/libm.so.6" would
work.  But the library I'm using only exposes lt_dlopenext.

Perhaps ltdl should parse the linker scripts and dlopen the real dll?

--- 
Regards,
Madhu



reply via email to

[Prev in Thread] Current Thread [Next in Thread]