Skip to content

[R-pkg-devel] r-package-devel-owner@r-project.org

4 messages · Zack McCaw, Dirk Eddelbuettel

#
Hello all,

I am attempting to submit a package (https://github.com/zrmacc/Temporal)
that uses RcppArmadillo. The package builds successfully locally (on Mac)
and on Windows. However, when submitting to CRAN, it fails to build on
Debian with the following error:

Error: package or namespace load failed for ?Temporal? in dyn.load(file,
DLLpath = DLLpath, ...): unable to load shared object
?/srv/hornik/tmp/CRAN/Temporal.Rcheck/00LOCK-Temporal/00new/Temporal/libs/Temporal.so?:/srv/hornik/tmp/CRAN/Temporal.Rcheck/00LOCK-Temporal/00new/Temporal/libs/Temporal.so:
undefined symbol: dgesvd_

I have ensured that the Makevars file is formatted as recommended by the
RcppArmadillo.package.skeleton
<https://cran.r-project.org/web/packages/RcppArmadillo/RcppArmadillo.pdf>()
function. Specifically, it contains the following:

CXX_STD = CXX11
PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS)
PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)

Any help with understanding how to resolve the error on Debian would
be greatly appreciated.

Thank you,
Zack
#
On 13 March 2020 at 11:53, Zack McCaw wrote:
| Hello all,
| 
| I am attempting to submit a package (https://github.com/zrmacc/Temporal)
| that uses RcppArmadillo. The package builds successfully locally (on Mac)
| and on Windows. However, when submitting to CRAN, it fails to build on
| Debian with the following error:
| 
| Error: package or namespace load failed for ?Temporal? in dyn.load(file,
| DLLpath = DLLpath, ...): unable to load shared object
| ?/srv/hornik/tmp/CRAN/Temporal.Rcheck/00LOCK-Temporal/00new/Temporal/libs/Temporal.so?:/srv/hornik/tmp/CRAN/Temporal.Rcheck/00LOCK-Temporal/00new/Temporal/libs/Temporal.so:
| undefined symbol: dgesvd_
| 
| I have ensured that the Makevars file is formatted as recommended by the
| RcppArmadillo.package.skeleton
| <https://cran.r-project.org/web/packages/RcppArmadillo/RcppArmadillo.pdf>()
| function. Specifically, it contains the following:
| 
| CXX_STD = CXX11
| PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS)
| PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
| 
| Any help with understanding how to resolve the error on Debian would
| be greatly appreciated.

Sort of the wrong forum. Please consider subscribing to the rcpp-devel list
and posting there.

Dirk
#
On 13 March 2020 at 14:17, Dirk Eddelbuettel wrote:
|
| On 13 March 2020 at 11:53, Zack McCaw wrote:
| | Hello all,
| | 
| | I am attempting to submit a package (https://github.com/zrmacc/Temporal)
| | that uses RcppArmadillo. The package builds successfully locally (on Mac)
| | and on Windows. However, when submitting to CRAN, it fails to build on
| | Debian with the following error:
| | 
| | Error: package or namespace load failed for ?Temporal? in dyn.load(file,
| | DLLpath = DLLpath, ...): unable to load shared object
| | ?/srv/hornik/tmp/CRAN/Temporal.Rcheck/00LOCK-Temporal/00new/Temporal/libs/Temporal.so?:/srv/hornik/tmp/CRAN/Temporal.Rcheck/00LOCK-Temporal/00new/Temporal/libs/Temporal.so:
| | undefined symbol: dgesvd_
| | 
| | I have ensured that the Makevars file is formatted as recommended by the
| | RcppArmadillo.package.skeleton
| | <https://cran.r-project.org/web/packages/RcppArmadillo/RcppArmadillo.pdf>()
| | function. Specifically, it contains the following:
| | 
| | CXX_STD = CXX11
| | PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS)
| | PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
| | 
| | Any help with understanding how to resolve the error on Debian would
| | be greatly appreciated.
| 
| Sort of the wrong forum. Please consider subscribing to the rcpp-devel list
| and posting there.

But now that we are here I took a look, and you "almost" got it right. Your
mistake was in using src/Makevars.in and not using a configure script to
create src/Makevars. So it remained unused.  You can tell: with your setting
my box did

  g++ -Wl,-S -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro \
     -o Temporal.so MatrixOps.o RcppExports.o -L/usr/lib/R/lib -lR

ie no linking the desired form!  Where once fixed we see

  g++ -std=gnu++11 -Wl,-S -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions \
     -Wl,-z,relro -o Temporal.so MatrixOps.o RcppExports.o \
     -fopenmp -llapack -lblas -lgfortran -lm -lquadmath -L/usr/lib/R/lib -lR

which has the link instruction.

I send you a pull request with the simple fix. If you just the merge button
you should be all set.

Dirk
#
Thank you very much.

Sincerely,
Zack
On Fri, Mar 13, 2020 at 12:31 PM Dirk Eddelbuettel <edd at debian.org> wrote: