Andrew Piskorski wrote: > > On Mon, Feb 05, 2007 at 01:28:24AM -0800, Vladimir Eremeev wrote: >> I am writing binding from C library to R. >> I use R 2.4.1, windows XP, and MinGW. > >> R CMD SHLIB -d --output=Rsnns.dll [ list of all C sources] > >> R CMD SHLIB -d --output Rsnns.dll Rsnns.c >> -Wl,-Lc:/mingw/lib,-lfl,-L../sources,-lkernel,-lfunc > > You should probably also show us the actual compiler/linker commands > that "R CMD SHLIB" is generating, so we can be sure of what's really > going on. >
It calls gcc: gcc "-I../sources" "-I." -IC:/PROGRA~1/R/include -gdwarf-2 -Wall -O2 -std=gnu99 -c rsnns.c -o rsnns.o gcc -shared -o Rsnns.dll Rsnns.def [ lots of *.o ] -LC:/PROGRA~1/R/bin "-Lc:/mingw/lib" -lfl -liberty -lR The file Rsnns.def is generated automatically and is deleted on success. On error, it remains, and contains export of all symbols. Probably GCC generates it, I haven't tracked its generation in the R's scripts. Andrew Piskorski wrote: > > I'm not sure what you may have to do differently with MinGW on Windows > (what linker does that use anyway?), but for comparison, here's how I > do it for R 2.2.1, on Linux (Ubuntu Dapper 6.06), with gcc 4.0.3, and > Gnu ld 2.16.91: > gcc.EXE (GCC) 3.4.2 (mingw-special) GNU ld version 2.15.91 20040904 Thank you, I'll study this linker option. Andrew Piskorski wrote: > > For my own custom R package's C code, my Makefile says: > OBJ = ../foo.o $(patsubst %.c,%.o,$(wildcard ../source/[a-z]*.c)) > $(OBJ): %.o: %.c $(HDRS) > R.so: $(OBJ) Makevars vis.map > R CMD SHLIB -o my_pkg_name_R.so $(OBJ) > > My Makevars includes this: > > PKG_LIBS = -Wl,--version-script=vis.map > > And when I build my R package, the R.so make target above generates > this link command: > > gcc -shared -o my_pkg_name_R.so [lots of *.o filenames here] > -Wl,--version-script=vis.map -L/usr/lib/R/lib -lR > > My vis.map file, which uses Gnu ld syntax, looks like this: > > { > global: my_pkg_*; > local:*; > }; > > That works, my shared library exports ONLY the symbols starting with > "my_pkg_", everything else remains private. > > It's the "--version-script" linker option doing the magic. Even with > Gnu ld, there are definitely other ways to control symbol visibility, > but that one seemed most convenient in my case. > -- > Andrew Piskorski <[EMAIL PROTECTED]> > http://www.piskorski.com/ > > -- View this message in context: http://www.nabble.com/How-to-customize-the-list-of-exported-functions-in-a-shared-library-tf3173289.html#a8807456 Sent from the R devel mailing list archive at Nabble.com. ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel