Date: Thu, 27 Oct 2005 22:54:21 -0700 (PDT) From: Rob <spamrefuse@yahoo.com> To: Igor Robul <igorr@speechpro.com>, FreeBSD questions <freebsd-questions@freebsd.org> Subject: Re: math/grace port: "libXcursor.so.1.0" not found ?? [SOLVED] Message-ID: <20051028055421.87740.qmail@web36214.mail.mud.yahoo.com> In-Reply-To: <4361B914.1020800@speechpro.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--- Igor Robul <igorr@speechpro.com> wrote: > Rob wrote: > > >----------------------------------- > > XtAppContext app_con; > > Display *disp = NULL; > > char *display_name = NULL; > > > > XtSetLanguageProc(NULL, NULL, NULL); > > XtToolkitInitialize(); > > app_con = XtCreateApplicationContext(); > > > > disp = XOpenDisplay(display_name); > >----------------------------------- > > > >(I have simplified this code snippet a bit, for > >this example; also, grace uses Motif for its GUI). > > > >Before the XOpenDisplay() call, dlerror() does > >not have the error-indicator set, but after > >that call, it has. > > > > > I wrote simple program to test XOpenDisplay + > dlopen: > > #include <X11/Xlib.h> > #include <dlfcn.h> > #include <stdio.h> > > main(int argc, char **argv) > { > Display *d; > void *handle; > void *f; > char *err; > > if ((err=dlerror()) != NULL) { > fprintf(stderr,"dlerror: %s\n", > err); > exit(1); > } > > d = XOpenDisplay(NULL); > if (d == NULL) { > fprintf(stderr, "Error in > XOpenDisplay\n"); > exit(1); > } > > if ((err=dlerror()) != NULL) { > fprintf(stderr, "dlerror: %s\n", err); > exit(1); > } > > XCloseDisplay(d); > > handle = dlopen(argv[1], RTLD_NOW); > if (handle == NULL) { > fprintf(stderr, "dlopen: %s\n", dlerror()); > exit(1); > } > > f = dlsym(handle, argv[2]); > if (f == NULL) { > fprintf(stderr, "dlsym: %s\n", dlerror()); > exit(1); > } > > dlclose(handle); > } > > Compile it with > gcc -o t t.c -I /usr/X11R6/include -L /usr/X11R6/lib > -lX11 > > Then test with: > ./t /usr/lib/libm.so pow > > Then > ./t /usr/lib/libm.so pow33 > dlsym: Undefined symbol "pow33" > > So as you can see on my system all looks good. Try > it on your system. > First: NULL return from dlsym() does not always imply an error. dlsym() can return NULL because it has an empty list, but this does not set the error indicator of dlerror(), because it is not an error. However, if an error occurs, dlsym() has NULL as a return (that's probably most sensible return). Second: I get different output than you, from this part of the program: d = XOpenDisplay(NULL); if (d == NULL) { fprintf(stderr, "Error in XOpenDisplay\n"); exit(1); } if ((err=(char *)dlerror()) != NULL) { fprintf(stderr, "dlerror: %s\n", err); exit(1); } I get here: dlerror: Shared object "nss_dns.so.1" not found, required by "t" So apparently dlerror() is set by XOpenDisplay(). Hmmm....yesterday I updated my world and kernel to most recent 5-Stable, and after that I recompiled all my ports. Still get this problem! This is my /etc/make.conf: ----------------------- CFLAGS= -O -pipe NOPROFILE=true NO_PF=true CUPS_OVERWRITE_BASE=yes NO_LPR=yes WITHOUT_NLS=yes WITHOUT_XFT=yes DOC_LANG=en_US.ISO8859-1 WITH_ASPELL=yes WITH_GTK2=yes WITH_GIMP=yes A4=yes WITH_X11=yes # added by use.perl 2005-10-26 14:20:09 PERL_VER=5.8.7 PERL_VERSION=5.8.7 ----------------------- Does that cause any problems? Rob. __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20051028055421.87740.qmail>