I wrote a file called pamcode.c where Pamcode.c #include <security/pam_appl.h> #include <security/pam_misc.h> ............................. int retval; struct pam_conv conv = { misc_conv, NULL } retval = pam_start("check_user", username, &conv, &pamh); retval = pam_authenticate(pamh, 0); ............................. On command line, if I create binary with command >> cc pam_code.c -lpam -lpam_misc -ldl Then, a.out is created and I can run it by ./a.out with no errors reported. However, if I try to build a library by having following line in makefile: Makefile .................. ld -G -dy -o libauthentication.so pam_code.o -lpam -lpam_misc -ldl .................. and then, having this library loaded into Java code as: javacode.java ...................................... System.LoadLibrary("authentication"); ...................................... Then, at runtime, I get an error 28 "Module is unknown" (static libs) from somewhere inside pam_pwdb.so I've discovered that the dlopen() call in pam_pwdb.so is failing with this error "/lib/security/pam_pwdb.so: undefined symbol: pam_get_item". /lib/security/pam_pwdb.so exists. The /etc/pam.d/check_user file is a symbolic link to /etc/pam.d/passwd, and passwd works fine ++++++++++++++++++++++++ However, if I change the makefile above to following: Makefile .................. ld -G -dy -o libauthentication.so pam_code.o /lib/security/pam_pwdb.so -lpam -lpam_misc -ldl .................. Essentially, symbolically linking the /lib/security/pam_pwdb.so to the libpam and libpammisc library, Then, everything's fine afterward (i.e: no runtime errors are reported, and I can make call from Java code. Any suggestion? Ideally, I prefer not to have /lib/security/pam_pwdb.so symbolically linked with the 2 pam libraries, but for now, that's the only way to make it work. Thanks. Canh.