On Sat, Mar 26, 2011 at 11:31 PM, Giorgos Keramidas <keram...@ceid.upatras.gr> wrote: > On Tue, Mar 22, 2011 at 2:28 PM, Jim <stapleton...@gmail.com> wrote: >> I have an application that opens two .so files with dlopen(3): >> /usr/local/lib/libag_core.so >> /usr/local/lib/libag_gui.so >> >> Both files exist >> Running nm(1) against each produces a lot of output, showing all the >> symbols I know to exist in each library. >> >> My application gets a null return from dlopen on the libag_gui.so. >> >> dlerror produces the following string: >> "/usr/local/lib/libag_gui.so Undefined symbol "agTimingLock" >> >> $ nm /usr/local/lib/libag_gui.so | grep agTiming >> U agTimingLock >> >> I'm guessing that means that agTimingLock is used in that library but >> not defined? >> >> $ nm /usr/local/lib/libag_core.so | grep agTiming >> 0000000000141c00 B agTimingLock >> >> And this would mean that it is defined in libag_core.so? > > Yes, but it's in the uninitialized data section: > > % man nm > ... > "B" > "b" The symbol is in the uninitialized data section (known as BSS). > > What is the "ag" library? Which version are you using? What sort of > dlopen() call did you try to run? >
The "ag" library is libagar ( http://libagar.org/ ): The code amounts to the following: void * coredl = dlopen("/usr/local/lib/libag_core.so", 0) void * guidl = dlopen("/usr/local/lib/libag_gui.so", 0) and the function: int (*AG_InitCore)(const char * title, int flags); int (*AG_InitGraphics)(const char * drv); *((void *)AG_InitCore) = dlsym(coredl, "AG_InitCore"); *((void *)AG_InitGraphics) = dlsym(guidl, "AG_InitGraphics"); The prototypes for the AG_* functions match. Thanks, -Jim Stapleton _______________________________________________ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"