2017-08-08 2 views
1

Ich bin ein Entwickler für https://github.com/shians/scpipe und im Moment kann das Paket nicht auf Windows erstellen.R-Paket kann DLL unter Windows nicht laden

Error: package or namespace load failed for 'scPipe' in inDL(x, as.logical(local), as.logical(now), ...): 
unable to load shared object 'C:/Users/pkgbuild/AppData/Local/Temp/RtmpAlOaQo/Rinst35046f5f2410/scPipe/libs/x64/scPipe.dll': 
    LoadLibrary failure: The specified module could not be found. 

vollständige Protokoll here.

Dieses Paket sollte jedoch mit

devtools::install_github("shians/scpipe") 

installierbar sein offensichtlich wird es scheitern. Aber es wird zumindest alle relevanten Abhängigkeiten installieren und Sie können dann die Quelle herunterladen, um weiter zu inspizieren.

Ich habe das Installationsziel überwacht, um zu sehen, dass tatsächlich an dem Punkt existiert, an dem der Ladevorgang versucht wird. Ansonsten weiß ich nicht, was ich sonst noch diagnostizieren kann.

Der einzige klare Unterschied zu Linux, macOS und Windows wäre die Makevars-Datei, die ich gemäß den Anweisungen von zlibbioc und Rhtslib eingerichtet habe.

Ich kann keine Ressource auf, was diesen Fehler verursachen kann. Es würde sehr geschätzt werden, wenn irgendjemand etwas Licht darauf werfen könnte. This SO thread war am nächsten, aber ich sah keine anwendbaren Lösungen, es ist offensichtlich nicht machbar für mich, die PATH-Einstellungen eines Benutzers mit meinem Paket zu ändern.

EDIT:

Die Befehle in Makevars.win erweitern, um

Rhtslib::pkgconfig("PKG_LIBS") 
-L"C:/Users/su.s/Documents/R/win-library/3.4/Rhtslib/lib/x64" -lhts -lz -pthread -lws2_32 

zlibbioc::pkgconfig("PKG_CFLAGS") 
-I"C:/Users/su.s/Documents/R/win-library/3.4/zlibbioc/include" 

zlibbioc::pkgconfig("PKG_LIBS_shared") 
-L"C:/Users/su.s/Documents/R/win-library/3.4/zlibbioc/libs/x64" -lzlib1bioc 

jeweils in einer vollständigen Kompilierung Nachricht für die

DLL resultierenden
c:/Rtools/mingw_64/bin/g++ -shared -s -static-libgcc -o scPipe.dll tmp.def RcppExports.o cellbarcode.o detect_barcode.o parsebam.o parsecount.o rcpp_scPipe_func.o transcriptmapping.o trimbarcode.o utils.o -LC:/Users/su.s/Documents/R/win-library/3.4/Rhtslib/lib/x64 -lhts -lz -pthread -lws2_32 -LC:/Users/su.s/Documents/R/win-library/3.4/zlibbioc/libs/x64 -lzlib1bioc -Ld:/Compiler/gcc-4.9.3/local330/lib/x64 -Ld:/Compiler/gcc-4.9.3/local330/lib -LC:/PROGRA~1/R/R-34~1.1/bin/x64 -lR 

die soweit ich mit erfüllt sagen kann, 5.8.2 of Writing R Extensions.

+0

Aus dem Blick auf Ihre Quellen scheint es, dass Sie eine nicht standardmäßige und kompliziertere Datei 'src/Makevars.win' verwenden. Es bricht also etwas - und jetzt kannst du die Teile behalten. –

+0

Nun, ich folgte einfach den Anweisungen von [zlibbioc] (https://bioconductor.org/packages/devel/bioc/vignettes/zlibbioc/inst/doc/UsingZlibbioc.pdf) und [Rhtlsib] (https://bioconductor.org /packages/release/bioc/vignettes/Rhtslib/inst/doc/Rhtslib.html) für mein Makefile.win. Ich würde mir vorstellen, wenn die eingeschlossenen Zeilen das Problem wären, dann würden wesentlich mehr Leute identische Probleme haben. – shians

+0

Ich habe keine Ahnung, was diese beiden Pakete sind, aber ich wende mich gerne an Sie, da es ** 1113 Arbeitspakete auf CRAN ** und weitere 90+ auf BioC gibt.Und all das baut auch auf Windows auf (naja, es gibt eine Handvoll Bibliotheken, die nur auf Unix-Bibliotheken angewiesen sind, aber das sind Sonderfälle). Also würde ich stattdessen mit diesen 1200 Arbeitspaketen beginnen. –

Antwort

0

Sie kommentieren oben, dass "ich einfach den Anweisungen folgte ....". Entschuldigen Sie bitte, aber diese Anweisungen scheinen Unsinn zu sein. Ich kann keine anderen Pakete finden, die diese Art von Ansatz auf Windows verwenden, und es scheint extrem spröde zu sein; Ich kann Ihr Paket mit cmd.exe installieren, aber es scheitert mit einer Windows Bash-Eingabeaufforderung.

Wie auch immer, was Sie haben, ist ein Linker-Fehler in Windows. R ist irgendwie scheiße darüber, diese zu melden. Was Sie tun müssen, ist das Paket mit --no-test-load zu installieren und dann die installierte .dll mit "Dependency Walker" zu untersuchen. In diesem Fall hat die generierte Binärdatei eine direkte binäre Abhängigkeit von zlib1bioc.dll, , die meiner Meinung nach einfach nicht unterstützt wird. Sie müssen Ihren Code neu strukturieren, um dies zu vermeiden. , die unter 5.8.2 abgedeckt ist, Schreiben von R-Erweiterungen.

+0

Ich glaube nicht, dass die DLL-Abhängigkeit das Problem ist. Wenn ich ein neues Rstudio R-Paketskelett mit einer neuen Standard-C++ - Datei plus der Einfügung von 'zlib.h' zusammen mit einem einzelnen' gzOpen'-Aufruf erzeuge, kann ich ein funktionales, installierbares und ladbares Paket mit demselben 'zlib1bioc' erhalten .dll' Abhängigkeit. – shians

+0

Wenn das stimmt, würde Ihr Paket korrekt geladen werden. Ihr Paket wird korrekt geladen, wenn Sie zlib1bioc.dll in denselben Ordner wie scPipe.dll kopieren. Ich habe dir gesagt, was das Problem ist, es liegt an dir, ob du es glaubst oder nicht. – DaBookshah

+0

Auch ich hoffe, Sie meinten 'gzopen' – DaBookshah

Verwandte Themen