[Rcpp-devel] undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE (on Ubuntu but not on Mac OS X)
Dirk Eddelbuettel
edd at debian.org
Mon Jul 6 19:35:43 CEST 2015
On 6 July 2015 at 12:10, Peng Yu wrote:
| Hi, I made a package using Rcpp and FORTRAN. But I see the following
| error message on Ubuntu (it can be installed correctly on Mac OS X).
|
| I searched for the solution to it. But it not clear how I should fix
| the problem. Could anybody let me know how to solve this problem.
|
| Loading required package: Rcpp
| R CMD INSTALL --preclean --no-multiarch /mnt/nfs/py/projects/Rusrpkg/lbfgsbr
| > tools:::.install_packages()
| * installing to library ‘/home/py/R/x86_64-pc-linux-gnu-library/3.1.0’
| * installing *source* package ‘lbfgsbr’ ...
| ** libs
| gfortran -fpic -g -O2 -c dcsrch.f90 -o dcsrch.o
| gfortran -fpic -g -O2 -c dcstep.f90 -o dcstep.o
| g++ -I/opt/packages/R/R-3.1.0/lib/R/include -DNDEBUG `echo
| "Rcpp:::CxxFlags()"|R --vanilla --slave` -I/usr/local/include -fpic
| -g -O2 -c mtlnsrch.cpp -o mtlnsrch.o
| gfortran -shared -L/usr/local/lib -o lbfgsbr.so dcsrch.o dcstep.o
| mtlnsrch.o -lgfortran
| installing to /home/py/R/x86_64-pc-linux-gnu-library/3.1.0/lbfgsbr/libs
| ** R
| ** preparing package for lazy loading
| ** help
| *** installing help indices
| ** building package indices
| ** testing if installed package can be loaded
| > tools:::.test_load_package('lbfgsbr', '/home/py/R/x86_64-pc-linux-gnu-library/3.1.0')
| Error in dyn.load(file, DLLpath = DLLpath, ...) :
| unable to load shared object
| '/home/py/R/x86_64-pc-linux-gnu-library/3.1.0/lbfgsbr/libs/lbfgsbr.so':
| /home/py/R/x86_64-pc-linux-gnu-library/3.1.0/lbfgsbr/libs/lbfgsbr.so:
| undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE
| Error: loading failed
| Execution halted
| ERROR: loading failed
| * removing ‘/home/py/R/x86_64-pc-linux-gnu-library/3.1.0/lbfgsbr’
| * restoring previous ‘/home/py/R/x86_64-pc-linux-gnu-library/3.1.0/lbfgsbr’
That is a linker error.
Now, if look at the linker statement from above (wrapped to one line here)
gfortran -shared -L/usr/local/lib -o lbfgsbr.so dcsrch.o dcstep.o mtlnsrch.o -lgfortran
you see that is contains no linking of any (system) C++ library.
So no wonder the symbol is missing.
You could try to start from a working package (Rcpp.package.skeleton() can
help) then add your Fortran file(s), and/or set LD in src/Makevars explicitly.
Dirk
--
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
More information about the Rcpp-devel
mailing list