-----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