From ignacio82 at gmail.com  Mon Jul 27 21:37:25 2015
From: ignacio82 at gmail.com (Ignacio Martinez)
Date: Mon, 27 Jul 2015 19:37:25 +0000
Subject: [Rd] R package with Fortran module on Windows? undefined
 reference to `__stack_chk_fail'
In-Reply-To: <CAJXgQP1tD2-t+r5RgOG0zj509AwkTCcU3fXMWRgMxx2qFFbcCg@mail.gmail.com>
References: <CAJA1VFzHTJpsDKFJ7oJi5s_yPt3VQ3pXuOxyrpexO40eVucu6Q@mail.gmail.com>
	<CAJXgQP1tD2-t+r5RgOG0zj509AwkTCcU3fXMWRgMxx2qFFbcCg@mail.gmail.com>
Message-ID: <CAJA1VFy7sA1ErM9sT-=QTnVw+00N4scD6X8VOn1OUZuSKC1Tcg@mail.gmail.com>

Thanks, I just got the answer on stackoverflow!!
<http://stackoverflow.com/questions/31638934/r-package-with-fortran-module-on-windows-undefined-reference-to-stack-chk-fa#31661475>
On Mon, Jul 27, 2015 at 3:12 PM Kevin Ushey <kevinushey at gmail.com> wrote:

> You should be able to set PKG_FCFLAGS="-fno-stack-protector" when
> compiling to ensure that the stack protector is not used.
>
> (Trying that out on a Windows VM, with a simple `R CMD build` + `R CMD
> INSTALL`, compilation of your package succeeded but linking failed
> saying the DLL 'Fpi' was not found; I imagine that's a separate
> issue.)
>
> As an aside, be sure to check out what R-exts has to say on the topic
> of Fortran code in R packages (especially F90 and above):
> https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Using-F95-code
> .
>
> Cheers,
> Kevin
>
> On Mon, Jul 27, 2015 at 11:06 AM, Ignacio Martinez <ignacio82 at gmail.com>
> wrote:
> > Hi,
> >
> > I created a R library that uses a Fortran module. Everything works like a
> > charm on linux.
> >
> > Now I'm trying to make it work on Windows. I cloned my git repository
> > <https://github.com/ignacio82/MyPi> on a windows computer, and when I
> press
> > the build and reload button on Rstudio I get these errors:
> >
> > ==> Rcmd.exe INSTALL --no-multiarch --with-keep.source MyPi
> > * installing to library
> > 'C:/Users/IMartinez/Documents/R/R-3.2.1/library'* installing *source*
> > package 'MyPi' ...** libs
> > gfortran -m64 -shared -s -static-libgcc -o MyPi.dll tmp.def Fpi.o
> > -Ld:/RCompile/r-compiling/local/local320/lib/x64
> > -Ld:/RCompile/r-compiling/local/local320/lib
> > -LC:/Users/IMARTI~1/DOCUME~1/R/R-32~1.1/bin/x64 -lR
> > Fpi.o: In function `__fortranpi_MOD_dboard':
> > Fpi.f90:(.text+0xd7): undefined reference to `__stack_chk_fail'
> > Fpi.o: In function `pi_':
> > Fpi.f90:(.text+0x249): undefined reference to `__stack_chk_fail'
> > collect2: ld returned 1 exit status
> > no DLL was created
> > ERROR: compilation failed for package 'MyPi'* removing
> > 'C:/Users/IMartinez/Documents/R/R-3.2.1/library/MyPi'
> >
> > Exited with status 1.
> >
> >
> > This is  the Fortran code:
> >
> >
> > Module Fortranpi
> > IMPLICIT NONE
> > contains
> > subroutine dboard(darts, dartsscore)
> >   integer, intent(in)                    :: darts
> >   double precision, intent(out)          :: dartsscore
> >   double precision                       :: x_coord, y_coord
> >   integer                                :: score, n
> >
> > score = 0
> > do n = 1, darts
> >   call random_number(x_coord)
> >   call random_number(y_coord)
> >
> >   if ((x_coord**2 + y_coord**2) <= 1.0d0) then
> >   score = score + 1
> >   end if
> > end do
> >
> > dartsscore = 4.0d0*score/darts
> >
> > end subroutine dboard
> >
> > subroutine pi(avepi, DARTS, ROUNDS) bind(C, name="pi_")
> >   use, intrinsic                         :: iso_c_binding, only :
> > c_double, c_int
> >   real(c_double), intent(out)            ::  avepi
> >   integer(c_int), intent(in)             ::  DARTS, ROUNDS
> >   integer                                ::  MASTER, rank, i, n
> >   integer, allocatable                   ::  seed(:)
> >   double precision                       ::  pi_est, homepi, pirecv,
> pisum
> > ! we set it to zero in the sequential run
> > rank = 0! initialize the random number generator! we make sure the
> > seed is different for each task
> > call random_seed()
> > call random_seed(size = n)
> > allocate(seed(n))
> > seed = 12 + rank*11
> > call random_seed(put=seed(1:n))
> > deallocate(seed)
> >
> > avepi = 0
> > do i = 0, ROUNDS-1
> >   call dboard(darts, pi_est)
> >   ! calculate the average value of pi over all iterations
> >   avepi = ((avepi*i) + pi_est)/(i + 1)
> > end do
> > end subroutine pi
> >
> > end module Fortranpi
> >
> >
> > I tried adding <http://i.stack.imgur.com/lC82X.png> -fno-stack-protector
> > -lssp but it did not help.
> >
> > I also tried doing this "by hand" <http://i.stack.imgur.com/WY4VD.png>
> and
> > I get these errors:
> >
> >
> >> system("R CMD SHLIB -fno-stack-protector -lssp ./src/Fpi.f90")
> > gfortran -m64 -shared -s -static-libgcc -o src/Fpi.dll tmp.def
> > ./src/Fpi.o -fno-stack-protector -lssp
> > -Ld:/RCompile/r-compiling/local/local320/lib/x64
> > -Ld:/RCompile/r-compiling/local/local320/lib
> > -LC:/Users/IMARTI~1/DOCUME~1/R/R-32~1.1/bin/x64 -lR>
> > dyn.load("./src/Fpi.dll")
> > Error in inDL(x, as.logical(local), as.logical(now), ...) :
> >   unable to load shared object
> 'C:/Users/IMartinez/Projects/MyPi/./src/Fpi.dll':
> >   LoadLibrary failure:  %1 is not a valid Win32 application.
> > 'C:/Users/IMartinez/Projects/MyPi/./src/Fpi.dll':
> >   LoadLibrary failure:  %1 is not a valid Win32 application.
> >
> >
> > Thanks for the help!
> > ?
> >
> >
> > PS: I posted this question in stackoverflow with no luck.
> > <
> http://stackoverflow.com/questions/31638934/r-package-with-fortran-module-on-windows-undefined-reference-to-stack-chk-fa
> >
> >
> >
> > PPS: I also sent this to r-help but they told me to try this list
> >
> >         [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-devel at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
>

	[[alternative HTML version deleted]]



[Rd] R package with Fortran module on Windows? undefined reference to `__stack_chk_fail'
Ignacio Martinez