On 31 May 2025 at 19:15, SN248 wrote: | Dear R package developers | | I am getting the following errors in my package (sundialr - | https://github.com/sn248/sundialr) which is a wrapper around SUNDIALS C | library. The warnings are as follows: | | ❯ checking compiled code ... | > WARNING File ‘sundialr/libs/sundialr.so’: | > Found ‘abort’, possibly from ‘abort’ (C) Object: | > ‘../inst/lib/libsundials_core.a’ | > Found ‘puts’, possibly from ‘printf’ (C), ‘puts’ (C) Object: | > ‘../inst/lib/libsundials_core.a’ | > Found ‘stderr’, possibly from ‘stderr’ (C) Object: | > ‘../inst/lib/libsundials_core.a’ | > Found ‘stdout’, possibly from ‘stdout’ (C) Objects: | > ‘../inst/lib/libsundials_core.a’, ‘../inst/lib/libsundials_cvodes.a’, | > ‘../inst/lib/libsundials_idas.a’, ‘../inst/lib/libsundials_nvecserial.a’ | > Compiled code should not call entry points which might terminate R nor | > write to stdout/stderr instead of to the console, nor use Fortran I/O nor | > system RNGs nor [v]sprintf. See ‘Writing portable packages’ in the ‘Writing | > R Extensions’ manual. | | | See them at - | https://cran-archive.r-project.org/web/checks/2025/2025-05-12_check_results_sundialr.html | | As far as I understand these warnings are coming from the following files: | | 1. 'abort' coming from - | https://github.com/sn248/sundialr/blob/ace6865ac0bc995190bc4c354a8823ea8d3bd358/src/sundials/sundials/sundials_errors.c#L87
You can get rid of `abort()` by using -DNDEBUG as a compiler flag. | 2. I cannot find the file/line where 'puts' is coming from You will have to locate it. Bisection may help. It will likely be `(s(n))printf` as the message suggests. | 3. stderr/stdout -- too many instances in SUNDIALS C code to list here, | e.g., | https://github.com/sn248/sundialr/blob/ace6865ac0bc995190bc4c354a8823ea8d3bd358/src/sundials/arkode/arkode.c#L1285 | | In principle, I don't want to change anything in the upstream C library | code while including it in my package. Is this any other way to resolve | these warnings as the package has been archived because of these warnings | now. There is no other way. You will have to change it in the code. Small local patches, or more elaborate accommodation (as eg RcppArmadillo does with Armadillo by having a way to inject Rcpp::Rcout). Uploading to CRAN and getting its 'stamp of approval', and with it world-wide distribution is still a privilege. It may cost a 'tax': most package maintainers are willing to pay it while others complain and would rather not. It's a choice, and it is yours to make. But the rules are made by CRAN. Cheers, Dirk -- dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel