To find out the reason why dlopen returns NULL, try to call dlerror, e.g. this way:
fprintf(stderr, "%s\n", dlerror());
Ldd shows nothing about external library absolutelly correct, because you link external library also dynamically. This means that all dependencies in your library will be resolved by dynamic linker when you load your library.