Jonathan Lees
2008-Apr-25 13:34 UTC
[R] package compilation: including external libraries in windows compilation
Dear R package developers: I need help on getting a package compiled for windows. I am trying to use definitions and routines from a set of libraries in that are in LINUX under #include <netdb.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> but these are unavailable in windows. I found that we can get these by including, in windows these includes: #include <winsock2.h> #include <io.h> My problem is I do not know how to instruct the preprocessor to include the linux .h files when in linux and the windows one in windows. I thought I found a solution online by using: #if defined(Win32) #include <winsock2.h> #include <io.h> #else #ifdef HAVE_UNISTD_H #include <unistd.h> #endif #ifdef HAVE_BSD_NETWORKING #include <netdb.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #endif #endif But I still get an error when these are compiled on the R-distribution. I do not understand where I am supposed to set the Win32 flag so that it will be ignored in LINUX but used in windows. where is "Win32" "HAVE_UNISTD_H" and "HAVE_BSD_NETWORKING" set? It seems that Makevars.win would be logical place, but I do not see how to do this. Thanks for any help. Jonathan Lees ---------- Making package WINRPACK ------------ adding build stamp to DESCRIPTION making DLL ... making win2R.d from win2R.c making win2asc.d from win2asc.c gcc-sjlj -std=gnu99 -Id:/Rcompile/recent/R-26~1.2/include -O3 -Wall -c win2R.c -o win2R.o win2R.c:21:24: error: sys/socket.h: No such file or directory win2R.c:22:24: error: netinet/in.h: No such file or directory win2R.c:23:23: error: arpa/inet.h: No such file or directory win2R.c: In function 'read_data': win2R.c:591: warning: implicit declaration of function 'ntohl' win2R.c: In function 'read_one_sec': win2R.c:723: warning: implicit declaration of function 'ntohs' make[3]: *** [win2R.o] Error 1 make[2]: *** [srcDynlib] Error 2 make[1]: *** [all] Error 2 make: *** [pkg-WINRPACK] Error 2 *** Installation of WINRPACK failed *** -- =========================================Prof. Jonathan M. Lees Department of Geological Sciences CB #3315, Mitchell Hall University of North Carolina Chapel Hill, NC 27599-3315 (919) 962-0695 FAX (919) 966-4519 jonathan_lees at unc.edu http://www.unc.edu/~leesj
Prof Brian Ripley
2008-Apr-25 14:25 UTC
[R] package compilation: including external libraries in windows compilation
The standard C define is WIN32, not Win32 (which R uses as private define). You could have PKG_CPPFLAGS=-DWin32 in Makevars.win, but this is unnecessary. See e.g. Rmath.h. On Fri, 25 Apr 2008, Jonathan Lees wrote:> Dear R package developers: > > I need help on getting a package compiled for windows. > I am trying to use definitions and routines from a > set of libraries in that are in LINUX under > #include <netdb.h> > #include <sys/socket.h> > #include <netinet/in.h> > #include <arpa/inet.h> > > but these are unavailable in windows. > I found that we can get these by including, in windows these includes: > > #include <winsock2.h> > #include <io.h> > > My problem is I do not know how to instruct the preprocessor to include > the linux .h files > when in linux and the windows one in windows. > > I thought I found a solution online by using:You mean in the R sources?> #if defined(Win32) > #include <winsock2.h> > #include <io.h> > #else > #ifdef HAVE_UNISTD_H > #include <unistd.h> > #endif > #ifdef HAVE_BSD_NETWORKING > #include <netdb.h> > #include <sys/socket.h> > #include <netinet/in.h> > #include <arpa/inet.h> > #endif > #endif > > But I still get an error when these are compiled on the R-distribution. > I do not understand where I am supposed to set the Win32 flag so > that it will be ignored in LINUX but used in windows. > where is "Win32" "HAVE_UNISTD_H" and "HAVE_BSD_NETWORKING" set?In config.h.> It seems that Makevars.win would be logical place, but > I do not see how to do this. > > Thanks for any help. > > Jonathan Lees > > > ---------- Making package WINRPACK ------------ > adding build stamp to DESCRIPTION > making DLL ... > making win2R.d from win2R.c > making win2asc.d from win2asc.c > gcc-sjlj -std=gnu99 -Id:/Rcompile/recent/R-26~1.2/include -O3 -Wall -c win2R.c -o win2R.o > win2R.c:21:24: error: sys/socket.h: No such file or directory > win2R.c:22:24: error: netinet/in.h: No such file or directory > win2R.c:23:23: error: arpa/inet.h: No such file or directory > win2R.c: In function 'read_data': > win2R.c:591: warning: implicit declaration of function 'ntohl' > win2R.c: In function 'read_one_sec': > win2R.c:723: warning: implicit declaration of function 'ntohs' > make[3]: *** [win2R.o] Error 1 > make[2]: *** [srcDynlib] Error 2 > make[1]: *** [all] Error 2 > make: *** [pkg-WINRPACK] Error 2 > *** Installation of WINRPACK failed *** > > > > > > > > > -- > =========================================> Prof. Jonathan M. Lees > Department of Geological Sciences > CB #3315, Mitchell Hall > University of North Carolina > Chapel Hill, NC 27599-3315 > (919) 962-0695 > FAX (919) 966-4519 > > jonathan_lees at unc.edu > http://www.unc.edu/~leesj > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Brian D. Ripley, ripley at stats.ox.ac.uk 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