[R] problem building an R package under Windows XP with calls to NAG C routines
Romain Neugebauer
romainn at hotmail.com
Fri Oct 29 03:15:46 CEST 2004
Hello all,
I was able to create R packages under windows XP in the past using the
dynamic NAG C library for windows XP (Mark 6).
Recently, I changed computers and I am now using the static NAG C library
for windows XP (Mark 7) to create a simple R package (called "test") which
simply returns random numbers simulated using repetitive calls to a NAG C
routine (uniform random generator). I use R Version 2.0.0. and installed all
the tools needed to build R packages as described in
http://www.murdochsutherland.com/Rtools/ and readme.packages.
I was able to successfully execute the C program that is part of this
package when compiling it using Microsoft visual studio. However, when I now
try to create the R package with the command "Rcmd INSTALL test" I obtain
the following:
C:\Rdevelop>Rcmd INSTALL test
---------- Making package test ------------
adding build stamp to DESCRIPTION
making DLL ...
making test.d from test.c
gcc -Ic:/R/rw2000/include -Wall -O2 -I"C:\Program Files\Numerical
Algorithms Group\CLW3207DA\include" -c test.c -o test.o
ar cr test.a test.o
ranlib test.a
windres --include-dir c:/R/rw2000/include -i test_res.rc -o test_res.o
gcc --shared -s -o test.dll test.def test.a test_res.o
-Lc:/R/rw2000/src/gnuwin32 -L"C:\Program Files\Microsoft Visual
Studio\VC98\Lib" -L"C:\Program Files\
Numerical Algorithms Group\CLW3207DA" -L"C:\Program Files\Numerical
Algorithms Group\CLW3207DA\mkl\lib" -lLIBCMT -lnagcsmt-mkl -lmkl_s -lmkl_def
-lmkl_lapack
-lADVAPI32 -lNETAPI32 -lg2c -lR
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
/mingw/lib/libmingw32.a(main.o)(.text+0x106):main.c: undefined reference to
`WinMain at 16'
make[3]: *** [test.dll] Error 1
make[2]: *** [srcDynlib] Error 2
make[1]: *** [all] Error 2
make: *** [pkg-test] Error 2
*** Installation of test failed ***
Removing 'C:/R/rw2000/library/test'
Restoring previous 'C:/R/rw2000/library/test'
Interestingly enough, if I remove the calls to the NAG C routine in the C
program AND if I remove the gcc flag "-lLIBCMT", the R package can be
created successfully and I can use the package in R (it will simply print a
"hello the world" line). I obtain:
C:\Rdevelop>Rcmd INSTALL test
---------- Making package test ------------
adding build stamp to DESCRIPTION
making DLL ...
gcc --shared -s -o test.dll test.def test.a test_res.o
-Lc:/R/rw2000/src/gnuwin32 -L"C:\Program Files\Microsoft Visual
Studio\VC98\Lib" -L"C:\Program Files\
Numerical Algorithms Group\CLW3207DA" -L"C:\Program Files\Numerical
Algorithms Group\CLW3207DA\mkl\lib" -lnagcsmt-mkl -lmkl_s -lmkl_def
-lmkl_lapack -lADVAPI
32 -lNETAPI32 -lg2c -lR
... DLL made
installing DLL
installing R files
installing data files
installing man source files
installing indices
not zipping data
installing help
>>> Building/Updating help pages for package 'test'
Formats: text html latex example chm
f text html latex example
adding MD5 sums
* DONE (test)
If I add the flag "-lLIBCMT" (and the C program still does not call any NAG
routine) I get the following:
C:\Rdevelop>Rcmd INSTALL test
---------- Making package test ------------
adding build stamp to DESCRIPTION
making DLL ...
making test.d from test.c
gcc -Ic:/R/rw2000/include -Wall -O2 -I"C:\Program Files\Numerical
Algorithms Group\CLW3207DA\include" -c test.c -o test.o
test.c: In function `test':
test.c:7: warning: unused variable `i'
ar cr test.a test.o
ranlib test.a
gcc --shared -s -o test.dll test.def test.a test_res.o
-Lc:/R/rw2000/src/gnuwin32 -L"C:\Program Files\Microsoft Visual
Studio\VC98\Lib" -L"C:\Program Files\
Numerical Algorithms Group\CLW3207DA" -L"C:\Program Files\Numerical
Algorithms Group\CLW3207DA\mkl\lib" -lLIBCMT -lnagcsmt-mkl -lmkl_s -lmkl_def
-lmkl_lapack
-lADVAPI32 -lNETAPI32 -lg2c -lR
Warning: .drectve `%.*s' unrecognized
Warning: .drectve `%.*s' unrecognized
/mingw/lib/libmingw32.a(main.o)(.text+0x106):main.c: undefined reference to
`WinMain at 16'
make[3]: *** [test.dll] Error 1
make[2]: *** [srcDynlib] Error 2
make[1]: *** [all] Error 2
make: *** [pkg-test] Error 2
*** Installation of test failed ***
Removing 'C:/R/rw2000/library/test'
Restoring previous 'C:/R/rw2000/library/test'
So it appears that the problem is not related to the calls to the NAG C
routines but to the library "LIBCMT" which is required when using the NAG
routines.
I contacted the NAG people who recommended to check the version of the
binutils and gcc from Mingw. I use gcc version 3.3.1 and I update the
binutils from
http://www.mingw.org/download.shtml using
binutils-2.13.90-20021006-2.tar.gz.
Any help would be greatly appreciated.
Note that I am able to build the same R package with calls to NAG routines
under linux with the static NAG C library for linux.
Thank you,
Romain
More information about the R-help
mailing list