[R-pkg-devel] Package Load fails to find 3rd Party DLL
Use of precompiled code is not allowed in CRAN. This looks like your package needs to be distributed elsewhere... e.g. via GitHub.
On July 12, 2023 6:41:11 AM PDT, Russell Almond <russell.g.almond at gmail.com> wrote:
I have an R package (RNetica available at https://ralmond.r-universe.dev/RNetica and https://github.com/ralmond/RNetica) which links to a 3rd party library Netica.dll, so RNetica.dll (built from my C code) calls the 3rd party code. The config.win script downloads Netica.dll and moves it into the libs/x64 directory, where it should get loaded when RNetica.dll is loaded.? However this is not happening: Here is the relevant portion of the build log (build is on R-universe, but I think it is the same script as CRAN): ``` cp "/d/a/ralmond/ralmond/RNETIC~1.RCH/00_PKG~1/RNetica/src/Netica/Netica_API_5 10/lib64/Netica.dll" "D:/a/ralmond/ralmond/RNetica.Rcheck/00LOCK-RNetica/00new/R Netica/libs/x64" ? cp "/d/a/ralmond/ralmond/RNETIC~1.RCH/00_PKG~1/RNetica/src/Netica/Netica_API_5 10/lib64/Netica.lib" "D:/a/ralmond/ralmond/RNetica.Rcheck/00LOCK-RNetica/00new/R Netica/libs/x64" ? C:\rtools43\x86_64-w64-mingw32.static.posix\bin\nm.exe: 'NeticaDLL': No such f ile ? gcc -shared -s -static-libgcc -o RNetica.dll tmp.def Cases.o Continuous.o Edge s.o Experience.o Inference.o Networks.o Node.o Random.o Registration.o Session.o ?-L. -LD:/a/ralmond/ralmond/RNetica.Rcheck/00LOCK-RNetica/00new/RNetica/libs/x64 ?-lNetica -LC:/rtools43/x86_64-w64-mingw32.static.posix/lib/x64 -LC:/rtools43/x8 6_64-w64-mingw32.static.posix/lib -LC:/R/bin/x64 -lR ? C:\rtools43\x86_64-w64-mingw32.static.posix\bin/ld.exe: internal error: aborti ng at ../../binutils-2.40/ld/ldlang.c:527 in compare_section ? C:\rtools43\x86_64-w64-mingw32.static.posix\bin/ld.exe: please report this bug ? collect2.exe: error: ld returned 1 exit status ``` A little bit of searching on the internet, indicates that Windows sometimes reports Dll A not found when Dll A needs Dll B and it can't find B. This used to work under older versions of R and the tool chain and I don't think I've changed anything related to the C side of the code. 1) Have the paths changed, so I no longer should be moving the (64 bit version of the) 3rd party DLL to `libs/x64`? 2) Is there something that has changed with the mingw tools (nm.exe and ld.exe) which are changing things? 3) Is there a change on how win32 and win64 variants are handled (I have both 32 and 64 bit copies of the 3rd party DLL, I just need to move them to the right places). Thanks for any enlightenment you can offer, ??? --Russell Almond
Sent from my phone. Please excuse my brevity.