[R-pkg-devel] Package Load fails to find 3rd Party DLL

Russell Almond ru@@e||@g@@|mond @end|ng |rom gm@||@com
Mon Jul 17 20:42:36 CEST 2023


Okay,  I've changed my Makevars.win so that it has:

PKG_LIBS = -L. -L${NETICA_LIB} -lNetica

and

all: NeticaDLL

where ${NETICA_LIB} is set to the appropriate lib subdirectory of the 
unpacked sources.  I'm no longer getting the nm.exe error, so it may be 
a bug in ld.exe.


| gcc -shared -s -static-libgcc -o RNetica.dll tmp.def Cases.o 
Continuous.o Edges.o Experience.o Inference.o Networks.o Node.o Random.o 
Registration.o Session.o -L. 
-L/c/Users/ralmond/Projects/RNetica/src/Netica/Netica_API_510/lib64 
-lNetica -LC:/rtools43/x86_64-w64-mingw32.static.posix/lib/x64 
-LC:/rtools43/x86_64-w64-mingw32.static.posix/lib 
-LC:/PROGRA~1/R/R-43~1.1/bin/x64 -lR
| C:\rtools43\x86_64-w64-mingw32.static.posix\bin/ld.exe: internal 
error: aborting 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

However, when I manually moved Netica.dll to the source directory, and 
removed NETICA_LIB from the path, it compiled correctly.

So, I'm guessing this is a bug in ld.exe, and in fact it is here:
https://github.com/msys2/MINGW-packages/issues/15469

So I'll see if I can try to fix my script to only copy the .dll and not 
the .lib.
	--Russell


On 7/17/23 5:30 AM, Ivan Krylov wrote:
> В Fri, 14 Jul 2023 22:25:51 +0300
> Ivan Krylov <krylov.r00t using gmail.com> пишет:
> 
>> Maybe it's a red herring. Maybe the message from nm about missing file
>> has always been harmless, and what we're seeing here is a bug in the
>> toolchain; perhaps ld.exe doesn't like something about Netica.lib so
>> much that it crashes. I think that's less likely. If you run the
>> commands manually but without mentioning NeticaDLL, do you get a DLL
>> in the end?
> 
> Judging by your build logs, this could be a toolchain bug. If you set
> the *.lib file aside and only give the *.dll to the linker (using
> -l:Netica.dll if necessary), does it still fail? I know that GCC can
> link directly to *.dll files, without relying on import libraries.
>



More information about the R-package-devel mailing list