goocreations
goocreations

Reputation: 3066

dlopen - cannot open shared object file

I'm compiling a shared library with gcc and loading it using dlopen. I also pass the following to the compiler:

-fvisibility=hidden

When I compile the library WITHOUT the visibility flag, everything works perfectly. However, when I compile WITH the flag, I get the following error with dlopen:

libtest.so: cannot open shared object file: No such file or directory

The linbrary .so file exists! This seems weird to me, since if some symbols are hidden, I would expect dlsym to fail if something cannot be found. However, this already fails when loading the library (aka dlopen).

I also tried adding

__attribute__ ((visibility ("default")))

to the functions I later call (extern "C"), without any success. Does anyone know what I can do about this? Or alternatively, is there any way to debug this to figure out why dlopen fails? I do not want to remove the visibility flag, since his drastically reduces my executable size.

Upvotes: 1

Views: 2317

Answers (1)

goocreations
goocreations

Reputation: 3066

My lib was depended on another lib that could not be found.


You may use ldd to see the list of all dependencies, including missing.

ldd libtest.so

Upvotes: 1

Related Questions