I think I did. But if I don't, (1) my OS is Linux (Debian) kernel 2.6.8, R version 2.1.1. (2) I generate the shared lib with a cutom makefile:
FC = g77 CC = gcc RC = R CMD SHLIB CFLAGS = -Df2cFortran -I/usr/local/lib/R/include -I/usr/local/include -g3 -shared -fPIC FFLAGS = -g3 -shared -fPIC all: libtest libtest: test.o prog.o $(RC) test.o prog.o -o libtest.so test.o: test.c test.h cfortran.h $(CC) $(CFLAGS) -c test.c prog.o: prog.f $(FC) $(FFLAGS) -c prog.f clean: rm *.o *.so (3) What I do in R is: > dyn.load("libtest.so") > .Call("simple_program") Thanks, Ricardo On 04 Sep 2005 21:54:20 +0200, Peter Dalgaard <[EMAIL PROTECTED]> wrote: > > Ricardo Luiz Andrade Abrantes <[EMAIL PROTECTED]> writes: > > > Hello there! > > I almost don't deal with SEXPs. The function's name is main() it returns > a > > SEXP wich is R_NilValue, thats all I use of SEXPs. This function call an > > optimization packge and the output goes all to a text file. > > Well, I followed Mr. Lumley's hint and used gdb with R and my program. > > Together with a friend we could find the problem. > > Inside the Fortran optimization package there's a subroutine called > cg(...), > > and for some wierd reason this subroutine is never called (so, some > > variables are not correctly initialized) and the program becomes crazy. > > I did this small example to show you what happens: > > > > File: prog.f > > ------------- > > subroutine cg() > > write(*,*) 'Just a simple test' > > end > > > > subroutine program() > > write(*,*) 'Calling the function...' > > call cg() > > end > > > > File test.h > > ------------ > > #include "cfortran.h" > > > > PROTOCCALLSFSUB0(PROGRAM,program) > > #define program() CCALLSFSUB0(PROGRAM,program) > > > > > > File test.c > > ------------ > > #include <R.h> > > #include <Rdefines.h> > > #include <stdio.h> > > #include "test.h" > > > > > > SEXP simple_program(){ > > program(); > > return R_NilValue; > > } > > > > > > I compile the C and Fortran souces into a shared lib. I open R, do a > > dyn.load("lib's name") and then a .Call("simple_program"). > > What I got? > > Calling the function... > > Segmentation fault > > > > What if I change the cg function's name to pp? My Fortran code is now: > > > > File: prog.f > > ------------- > > subroutine pp() > > write(*,*) 'Just a simple test' > > end > > > > subroutine program() > > write(*,*) 'Calling the function...' > > call pp() > > end > > > > And the output from R is: > > > > Calling the function... > > Just a simple test > > NULL > > > > Can anyone explain this? Is there a way to solve it? The optimization > > package I use has the "cg" function, and I cannot change it's name! > > Hmmmm.... Did you ever tell us > > 1) Exactly what your platform is > 2) How you generated the shared library (R CMD SHLIB, or?) > 3) What you did to load it into R > > ? > > -- > O__ ---- Peter Dalgaard Ă˜ster Farimagsgade 5, Entr.B > c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K > (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 > ~~~~~~~~~~ - ([EMAIL PROTECTED]) FAX: (+45) 35327907 > [[alternative HTML version deleted]]
______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel