[Rcpp-devel] Rcpp + Package -> undefined symbol

Dirk Eddelbuettel edd at debian.org
Wed Aug 2 21:16:11 CEST 2017


On 2 August 2017 at 21:02, Michaël BENESTY wrote:
| Thank you Dirk for this answer.
| 
| The source code of Fasttext is already embedded in the package (it is
| the content of ../inst/include/ and is linked with PKG_CPPFLAGS +
| include of headers).
| So no issue with user having it or needing to link with PKG_LIBS.
| 
| I have checked the compilation with this Makevars:
| CXX_STD = CXX11
| ROOT_INCLUDE = ../inst/include/
| PKG_CPPFLAGS = -I$(ROOT_INCLUDE)
| PKG_LIBS = -L$(ROOT_INCLUDE)
| 
| And I still get the same error.
| 
| 
| Is there anything else to check?
| The error seems related to a shared object, do I have something special to do?
| I am not even sure to understand the error message, why it can't load
| the object if it has compiled?

Pardon for me being blunt, but you still appear to be confused.

Simply copying headers _and source files_ into inst/include/ does not
magically create a library.  You are, from the looks of it, simply not fully
aware of what exactly building a package _against an external library_ needs.

So you need to learn this.

Resist the urge to immediately reply to this email, but rather try to read up
and study some more package.  Most of mine use _external_ libraries (not
embedded and built on default) but eg the older RcppMLPACK (by KK) is a
working example (cf https://github.com/rcppmlpack/RcppMLPACK1) as are several
of Jeroen's packages (eg https://github.com/ropensci/hunspell/ as one
semi-random pick).

Dirk
 
| Kind regards,
| Michaël
| 
| 
| On Wed, Aug 2, 2017 at 8:32 PM, Dirk Eddelbuettel <edd at debian.org> wrote:
| >
| > On 2 August 2017 at 20:22, Michaël BENESTY wrote:
| > | Hi,
| > |
| > | I am trying to wrap the Fasttext lib from Facebook on R.
| > | I have wrote a minimal code based on Rcpp.package.skeleton(module = TRUE)
| > |
| > | The C++ file compiles/works with sourceCpp() but it crashes when
| > | building a package.
| > | I have checked many D. Eddelbuettel to get a clue of what to do but no luck.
| > | I have already setup a Makevars file with a path to the include folder.
| > |
| > | The package source code is available there:
| > | https://github.com/pommedeterresautee/FastRText
| > |
| > | My Makevars:
| > | CXX_STD = CXX11
| > | ROOT_INCLUDE = ../inst/include/
| > | PKG_CPPFLAGS=-I$(ROOT_INCLUDE)
| >
| > If this is a library then you need to __link__ to it as well. That is
| > commonly done via PKG_LIBS=... and it may get you the additional problem of
| > having to ensure users of your package have the fastText library installed.
| >
| > Dirk
| > |
| > |
| > | The error I am seeing:
| > | ==> R CMD INSTALL --preclean --no-multiarch --with-keep.source FastRText
| > | ...
| > | Error: package or namespace load failed for ‘FastRText’ in
| > | dyn.load(file, DLLpath = DLLpath, ...):
| > |  impossible de charger l'objet partagé
| > | '/home/geantvert/R/x86_64-pc-linux-gnu-library/3.4/FastRText/libs/FastRText.so':
| > |   /home/geantvert/R/x86_64-pc-linux-gnu-library/3.4/FastRText/libs/FastRText.so:
| > | undefined symbol: _ZN8fasttext8FastTextC1Ev
| > |
| > |
| > | The full log is available there:
| > | https://github.com/pommedeterresautee/FastRText/issues/1
| > |
| > | According to c++filt
| > | undefined symbol: _ZN8fasttext8FastTextC1Ev means ->
| > | fasttext::FastText::FastText()
| > |
| > |
| > | Has anyone an idea?
| > |
| > | Kind regards,
| > | Michaël
| > | ________________
| > | Michaël BENESTY
| > | michael at benesty.fr
| > | Please do not print this e-mail unless you really need to.
| > | _______________________________________________
| > | Rcpp-devel mailing list
| > | Rcpp-devel at lists.r-forge.r-project.org
| > | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
| > --
| > http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org

-- 
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org


More information about the Rcpp-devel mailing list