Just a note: if you do need -L, it would almost certainly be -L/usr/lib64 on this system.
As a diagnostic check, try nm -g /mnt/san2/braunm/winshare/braunm/Cpractice/RgslTest.so which will probably have 'U' for lots of symbols from gsl. On Tue, 12 Dec 2006, Duncan Temple Lang wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hi Michael. > > [There's no need to send two pieces of mail that are essentially the > same issue.] > > The problem is that when you are creating the shared object > gslTestHG.so, you are not telling the linker to combine information > from the libgsl.so or libgsl.a file. The linker needs that to resolve > the symbols that were referenced in your RgslTest.c code. > Without this, the linker then assumes that these missing symbols will be > found when the .so is loaded, i.e. in the host application, namely R. > Compiling, linking and loading are three different steps in this > process. It helps to diagnose problems if one has an understanding > of what each does (approximately). Otherwise, the error messages > can be cryptic. > > One way to fix the problem is to create a file names Makevars in the > same directory as RgslTest.c and add to it > > PKG_CPPFLAGS=-I/usr/include > PKG_LIBS=-L/usr/lib -lgsl > > The second of these lines tells the linker to include the symbols in > libgsl.so or libgsl.a and that it should look for this in /usr/lib/ > (You may have to change this, but it looks like that is where you have > gsl installed juding from the #include). > The -I/usr/include and -L/usr/lib are likely to be unnecessary > but illustrate the idea that one adds library-specific include > and library directories to allow the compiler and linker > respectively find files it needs for that library's code. > > And change your RgslTest.c code to have > #include <gsl/gsl_sf_hyperg.h> > not the full path name to the .h file. > > > D. > > > [EMAIL PROTECTED] wrote: >> I hope that someone on this list can help me with this issue. I have >> searched >> through all of the documentation and mail archives for a solution, but have >> been unable to find an answer that addresses my particular problem directly. >> >> Suppose I am writing some C code that I want to access from R through the .C >> function. As part of the C function, I want to include an external C >> library, >> such as the GNU gsl library. So, if I want to compute the value of a >> Gaussian >> hypergeometric function, my C code would be: >> >> #include </usr/include/gsl/gsl_sf_hyperg.h> >> void gslTestHG (double *a, double *b, double *c, double *x, double *val ) { >> >> *val = gsl_sf_hyperg_2F1(*a,*b,*c,*x); >> } >> >> I then compile this file (successfully, on a Linux machine with gcc >> installed) >> using R CMD SHLIB gslTest.c. The message from the complier is: >> >> gcc -I/usr/lib64/R/include -I/usr/lib64/R/include -I/usr/local/include >> -fpic >> -O2 -g -c RgslTest.c -o RgslTest.o >> gcc -shared -L/usr/local/lib64 -o RgslTest.so RgslTest.o -L/usr/lib64/R/lib >> -lR >> >> >> When I go into R and enter the command dyn.load("gslTestHG.so"), I get the >> following error: >> >> Error in dyn.load(x, as.logical(local), as.logical(now)) : unable to load >> shared >> library '/mnt/san2/braunm/winshare/braunm/Cpractice/RgslTest.so': >> /mnt/san2/braunm/winshare/braunm/Cpractice/RgslTest.so: undefined symbol: >> gsl_sf_hyperg_2F1 >> >> So, it looks like R is not recognizing the function call within my own C >> function, even though the library was included. >> >> Note that this is a simpler example of my "real" problem, the details of >> which >> would bog down discussion. I know that I could use the gsl package, or >> include >> the Rmath.h library, to perform this particular task. My primary need is the >> ability to call C libraries from wtihin my own C code. >> >> But I would greatly appreciate any advice or suggestions on how to solve this >> problem. I am a novice C programmer and Linux user, but it seems like this >> should be a simple fix. >> >> Many thanks in advance, >> >> Michael Braun >> MIT Sloan School of Management >> [EMAIL PROTECTED] >> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > > - -- > Duncan Temple Lang [EMAIL PROTECTED] > Department of Statistics work: (530) 752-4782 > 4210 Mathematical Sciences Building fax: (530) 752-7099 > One Shields Ave. > University of California at Davis > Davis, > CA 95616, > USA > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.3 (Darwin) > > iD8DBQFFfyRR9p/Jzwa2QP4RAvBBAJ9nNDK4kWNt2fpCv9pw/r3XPpq6VQCfU9CL > ziDU+0OcPTEJgVV1RR/OFvA= > =oMxN > -----END PGP SIGNATURE----- > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel