[R-pkg-devel] DLL requires the use of native symbols

Dirk Eddelbuettel edd @end|ng |rom deb|@n@org
Mon Mar 20 17:56:16 CET 2023


On 20 March 2023 at 12:43, Duncan Murdoch wrote:
| It appears that you have some uses of .Call() where you are passing a 
| character variable as the first argument, instead of registering the 
| entry point and passing the variable containing the registration 
| information.

Correct. And to make the case worse, the package then calls (on line 130 of
coranking_main.cpp) the very 'R_forceSymbols(info, TRUE);' that is now
telling it about the error of using _quoted_ ("text") rather than symbol
references. Just removing line 130 may work.
 
|  From your second link, it looks like Rcpp has some special way to 
| handle entry point registration.  I'm not familiar with that, I use the 
| basic way described in Writing R Extensions, section 5.4 "Registering 
| native routines".

Rcpp checks if a useDynLib("nameofpackage") has `, .registration=TRUE)` and
if so, creates glue code with symbols (ie what Guido desires here) instead of
text variables (as was common a long time ago).

That was the case of package 'sf' which I helped yesterday; all it took there
was to ensure it used `useDynLib("sf", .registration=TRUE)` and to re-create
the generated RcppExports.R via Rcpp's own `compileAttributes()` function (as
I did in PR that Edzer merged hours later).

But none of this helps Guido as his package prefers to do it all by hand --
which is perfectly fine and valid, of course -- but a little bit more work.

Hth, Dirk

-- 
dirk.eddelbuettel.com | @eddelbuettel | edd using debian.org



More information about the R-package-devel mailing list