Libelektra: Einige Tests schlagen unter OS X fehl

Erstellt am 26. Apr. 2016  ·  57Kommentare  ·  Quelle: ElektraInitiative/libelektra

Anscheinend schlägt test_kdb.lua unter OS X fehl:

        Start  69: test_kdb.lua
 69/117 Test  #69: test_kdb.lua .......................***Failed    0.00 sec
        Start  70: test_key.lua
 70/117 Test  #70: test_key.lua .......................   Passed    0.00 sec
        Start  71: test_keyset.lua
 71/117 Test  #71: test_keyset.lua ....................   Passed    0.00 sec

Wenn ich lua ../src/bindings/swig/lua/tests/test_kdb.lua ausführe, wird das Skript einfach mit dem Rückgabewert 0 . Wenn Sie weitere Informationen benötigen, kommentieren Sie einfach unten.

bug

Alle 57 Kommentare

Es tut mir leid, aber ich habe kein OS X. ctest -V ist jedoch dein Freund.

Übrigens ist das Aufrufen von lua $file nicht dasselbe wie das Ausführen der Tests. Sie verwenden die vom System installierte kdb-Bibliothek, während die Tests offensichtlich die Bibliothek verwenden, die sich im Build-Verzeichnis befindet. Sie sollten mindestens LUA_CPATH festlegen. siehe https://github.com/ElektraInitiative/libelektra/blob/master/src/bindings/swig/lua/tests/CMakeLists.txt#L12

90% der swig-bezogenen Abstürze waren auf Fehler in der Build-Umgebung zurückzuführen. Versuchen Sie also zuerst, die Swig-Bindungen zu regenerieren (!) + neu zu kompilieren.

Dieses Problem könnte mit ad537b3 zusammenhängen (zumindest unter Linux stürzte kdb*lua|python ab, aber die Fehlerbehebung für Linux ist Teil von ad537b3). Ohne Ausgabe des Tests kann man nicht wirklich sagen.

Sie können make run_all , um die Ausgabe erfolgreicher Testfälle zu unterdrücken, aber die Ausgabe für die fehlgeschlagenen anzuzeigen.

@sanssecours Gibt es dazu ein Update?

Dieses Problem könnte mit ad537b3 zusammenhängen (zumindest unter Linux stürzte kdb*lua|python ab, aber die Fehlerbehebung für Linux ist Teil von ad537b3). Ohne Ausgabe des Tests kann man nicht wirklich sagen.

@sanssecours Gibt es dazu ein Update?

Entschuldigung für die späte Antwort. Ich dachte, ich hätte bereits einen Kommentar geschrieben, der erweiterte Informationen zu diesem Thema enthält. Lassen Sie mich damit beginnen, dass testpy2_kdb.py auch auf meinem Computer fehlschlägt. Es könnte also ein Problem mit meinem spezifischen Setup sein. Ich habe SWIG über Homebrew installiert und verwende derzeit den folgenden cmake Befehl, um die Build-Dateien für Elektra zu generieren:

cmake .. -GNinja -DENABLE_TESTING=ON -DCMAKE_PREFIX_PATH=/usr/local/opt/qt5 -DTOOLS='qt-gui;kdb' -DBUILD_PDF=ON -DBINDINGS=SWIG

Hier ist die Ausgabe von ctest -V -R test_kdb.lua :

test 65
    Start 65: test_kdb.lua

65: Test command: /usr/local/bin/lua "/Users/rene/Dropbox/Studium/Master Thesis/Configuration Parsing/Source/Elektra/src/bindings/swig/lua/tests/test_kdb.lua"
65: Environment variables:
65:  LUA_CPATH=/Users/rene/Dropbox/Studium/Master Thesis/Configuration Parsing/Source/Elektra/build/src/bindings/swig/lua/?.so
65: Test timeout computed to be: 1500
65: /usr/local/bin/lua: kdb:1 Warning was issued:
65:  Warning number: 1
65:     Description: could not load module, dlopen failed
65:     Ingroup: modules
65:     Module: dl
65:     At: ../src/libs/loader/dl.c:82
65:     Reason: of module: libelektra-resolver.so, because: dlopen(libelektra-resolver.so, 2): image not found
65:     Mountpoint:
65:     Configfile:
65: Error (#40) occurred!
65: Description: Failed to open default backend (see warnings for more information)
65: Ingroup: kdb
65: Module:
65: At: ../src/libs/elektra/kdb.c:282
65: Reason: could not open default backend
65: Mountpoint:
65: Configfile:
65:
65: stack traceback:
65:     [C]: in ?
65:     [C]: in function 'KDB'
65:     .../Source/Elektra/src/bindings/swig/lua/tests/test_kdb.lua:20: in main chunk
65:     [C]: in ?
1/1 Test #65: test_kdb.lua .....................***Failed    0.00 sec

0% tests passed, 1 tests failed out of 1

Label Time Summary:
bindings    =   0.00 sec (1 test)
kdbtests    =   0.00 sec (1 test)
memleak     =   0.00 sec (1 test)

Total Test time (real) =   0.01 sec

The following tests FAILED:
     65 - test_kdb.lua (Failed)
Errors while running CTest

Anscheinend kann Lua libelektra-resolver.so , das sich in build/lib und /usr/local/lib/elektra auf meinem Computer befindet. Muss ich einen Bibliothekspfad festlegen, damit dies funktioniert? Übrigens, es sieht so aus, als ob testpy2_kdb.py auch wegen genau dem gleichen Problem fehlschlägt.

Die Bindings laden keine Elektra-Bibliothek zur Laufzeit. Sie sind nur Bindungen. Sie können dies sehen, indem Sie sich den genauen Fehlerort ansehen, der ../src/libs/loader/dl.c:82 .

Dies ist also entweder ein Problem mit Ihrer Umgebung, ein allgemeines Elektra-Problem unter OSX oder ein Build-System-Problem unter OSX. Ich vermute ersteres. ping @markus2330

dlopen(libelektra-resolver.so, 2): image not found sieht tatsächlich so aus, als hätte es nichts mit lua zu tun.

libelektra-resolver.so sollte ein Symlink zu dem Resolver sein, den Sie mit KDB_DEFAULT_RESOLVER , vielleicht ist Ihr Setup/Ihre Installation defekt? Können Sie überprüfen, ob die Symlinks korrekt sind?

Seltsam ist: libelektra-resolver.so wird in jedem kdb-bezogenen Testfall verwendet, warum funktioniert es nur in diesem Testfall _nicht_? Vielleicht verwendet dieser Testfall (und der Python) die installierte Bibliothek und nicht die Bibliothek im Build-Verzeichnis. Können Sie mit strace überprüfen, welche libelektra-resolver.so der Testfall zu laden versucht?

image not found ist ziemlich generisch, kann es sein, dass in der Bibliothek das Image für Ihre Architektur nicht gefunden wird? Verwenden Sie fette Binärdateien ?

libelektra-resolver.so sollte ein Symlink zu dem Resolver sein, den Sie mit KDB_DEFAULT_RESOLVER , vielleicht ist Ihr Setup/Ihre Installation defekt?

Gibt es eine einfache Möglichkeit zu überprüfen, ob die lokale Elektra-Installation defekt ist? Der Befehl kdb scheint zu funktionieren.

Können Sie überprüfen, ob die Symlinks korrekt sind?

Beide libelektra-resolver.so Aliasnamen verweisen auf eine Datei libelektra-resolver_fm_hpu_b.so sich im selben Verzeichnis wie die Aliase befindet. Sie scheinen also richtig zu sein.

Können Sie mit strace überprüfen, welche libelektra-resolver.so der Testfall zu laden versucht?

Ich habe sudo dtruss ctest -V -R test_kdb.lua versucht. Hier ist die Ausgabe:
test_kdb.lua -dtruss Ausgabe.txt . Sieht so aus, als würde der Test die Elektra-Version im Build-Verzeichnis verwenden. Ich habe Elektra über sudo ninja uninstall deinstalliert. Ich habe den Test dann nochmal durchgeführt. Die Ausgabe ist immer noch die gleiche.

Verwenden Sie fette Binärdateien?

Nicht dass ich wüsste.

Benutzt du OSX El Capitan? Es könnte sich um ein seltsames Problem mit dem Systemintegritätsschutz handeln .

Es ist irgendwie seltsam, dass kdb funktioniert.

Wenn es wegen der Python/lua-Installation mit einem Systemintegritätsschutz zu tun hat, kann es sinnvoll sein.

Benutzt du OSX El Capitan? Es könnte sich um ein seltsames Problem mit dem Systemintegritätsschutz handeln.

Ja, ich verwende OS X 10.11.4. Ich habe SIP vorübergehend deaktiviert und den Test erneut durchgeführt. Immer noch das gleiche Problem. Obwohl ich nach dem Deaktivieren von SIP auf einen neuen Test gestoßen bin, der fehlschlägt: testscr_check_kdb_internal_suite . Und jetzt geht testscr_check_merge auch nicht mehr 😢.

Ich ging zurück zu 0.8.16, bereinigte mein Build-Verzeichnis und ließ ninja test erneut laufen. Sowohl testscr_check_kdb_internal_suite als auch testscr_check_merge scheitern immer noch, obwohl ich mich daran erinnert habe, dass mindestens testscr_check_kdb_internal_suite funktioniert hat, als Elektra 0.8.16 veröffentlicht wurde. Hier ist die Ausgabe des zusätzlichen Tests, der jetzt ebenfalls fehlschlägt:
testcr_check_kdb_internal_suite.txt
testcr_check_merge.txt

Ich habe den Titel geändert und mich selbst entfernt. Ich habe keinen direkten Zugriff auf einen OSX-Rechner und es fehlen mir fundierte Kenntnisse. Ohne eine Maschine zum Herumstöbern kann ich der Textausgabe nichts entnehmen.

Hast du dir auch die anderen Hinweise der Links angeschaut? ZB Python/lua neu installieren?

@petermax2 @mpranj Können Sie diese Probleme reproduzieren?

Hast du dir auch die anderen Hinweise der Links angeschaut? ZB Python/lua neu installieren?

Entschuldigung, nicht wirklich. Die Installation von Python 2 ist diejenige, die mit dem System geliefert wurde. Um es neu zu installieren, müsste ich das gesamte Betriebssystem neu installieren.

Ich habe Lua nur installiert, um das Lua Elektra-Plugin zu testen. Daher halte ich eine Neuinstallation nicht für sinnvoll. Da es jedoch nur Sekunden dauert, habe ich brew reinstall lua . Danach habe ich mit einem sauberen Build-Verzeichnis angefangen, die Build-Befehle ausgeführt und ctest -VV -R test_kdb.lua . Der Test zeigt immer noch die gleiche Ausgabe.

Übrigens: Die Tests testscr_check_kdb_internal_suite und testscr_check_merge funktionieren nun auch wieder korrekt, nachdem ich alle Dateien aus /etc/kdb .

Eine andere Idee habe ich aktuell nicht. (außer zeitraubende Isolierung des Problems: um den dlopen-Aufruf auf ein minimales Beispiel zu reduzieren, wo es nicht funktioniert) Also am besten warten, wenn jemand das Problem reproduzieren kann, vielleicht wirft es neues Licht auf das Problem.

Ich kann das gleiche Verhalten auf meinem Rechner bestätigen.

Lösung: Stellen Sie den Bibliothekspfad richtig ein: zB
LD_LIBRARY_PATH="/Users/mpranj/workspace/libelektra/build/lib" ctest -V -R test_kdb.lua funktioniert bei mir einwandfrei.

dlopen unter OS X sucht $LD_LIBRARY_PATH, $DYLD_LIBRARY_PATH, current working directory, $DYLD_FALLBACK_LIBRARY_PATH , ich denke in dieser Reihenfolge.

Der PR #710 behebt es, ich bin mir jedoch nicht sicher, ob das Update sehr sauber ist.

Nein, der Fix ist definitiv nicht sauber.

Soweit ich mich erinnere, basieren unsere Tests darauf, dass DT_RPATH in libelektra-kdb.so . Wenn dies unter OSX nicht verfügbar ist, sollten wir dies in einer globalen Build-Umgebung definieren.

Edit: Aber danke, dass du es herausgefunden hast!

RPATH ist für alle Kernbibliotheken gesetzt, aber vielleicht sollte libelektra-core ausreichen: an dieser Stelle passiert das dlopen .

Bedeutet image not found einfach, dass die Bibliothek nicht gefunden wurde? Wenn ja, haben Sie eine Idee, warum RPATH für alle Tests außer den Lua- und Python-Tests funktioniert?

Nur zur Information: Elektra unterstützt auch Systeme ohne RPATH (zB openwrt mit musl als libc), indem einfach TARGET_PLUGIN_FOLDER auf einen leeren String gesetzt wird.

Es scheint, dass ähnliche Dinge auf FreeBSD passieren.

 66/118 Test  #66: test_kdb.py ........................***Failed    0.09 sec
..EEEE
======================================================================
ERROR: test_ctor (__main__.KDB)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/mpranj/workspace/libelektra/src/bindings/swig/python/tests/test_kdb.py", line 25, in test_ctor
    self.assertIsInstance(kdb.KDB(), kdb.KDB)
  File "/home/mpranj/workspace/libelektra/build/src/bindings/swig/python/kdb.py", line 1742, in __init__
    _kdb.KDB_swiginit(self, _kdb.new_KDB(*args))
kdb.KDBException: 1 Warning was issued:
 Warning number: 1
    Description: could not load module, dlopen failed
    Ingroup: modules
    Module: dl
    At: /home/mpranj/workspace/libelektra/src/libs/loader/dl.c:82
    Reason: of module: libelektra-resolver.so, because: Shared object "libelektra-resolver.so" not found, required by "python3"
    Mountpoint:
    Configfile:
Error (#40) occurred!
Description: Failed to open default backend (see warnings for more information)
Ingroup: kdb
Module:
At: /home/mpranj/workspace/libelektra/src/libs/elektra/kdb.c:282
Reason: could not open default backend
Mountpoint:
Configfile:

Konnte Lua auf FreeBSD noch nicht überprüfen.

@mpranj gut zu wissen, also scheint FreeBSD ein guter Hinweis zu sein, wenn es auch mit MacOSX (neben OpenBSD) funktioniert. Funktionieren die anderen kdb Testfälle und das kdb Befehlszeilentool?

Können Sie Ausgaben zu Testfällen öffnen oder an OpenBSD-Ausgaben anhängen, die unter FreeBSD nicht funktionieren?

Wenn du diese meinst:

        Start 115: testkdb_allplugins
115/118 Test #115: testkdb_allplugins .................   Passed    0.02 sec
        Start 116: testkdb_nested
116/118 Test #116: testkdb_nested .....................   Passed    0.27 sec
        Start 117: testkdb_conflict
117/118 Test #117: testkdb_conflict ...................   Passed    0.17 sec
        Start 118: testkdb_simple
118/118 Test #118: testkdb_simple .....................   Passed    0.42 sec

... dann ja. Das Tool kdb scheint zu funktionieren (nur eine kurze Überprüfung mit ls).

Ansonsten scheitern viele Dinge, aber ich kann heute nicht alles überprüfen/melden. Aber sicher werde ich alles berichten, wenn ich es richtig testen kann.

Meine Vermutung ist, dass die kdb-Tests funktionieren, weil sie statisch verknüpft sind, oder?
Wenn ich BUILD_STATIC deaktiviere, funktionieren die Tests auch nicht.

@markus2330 Ich glaube nicht, dass wir es vermeiden können, auf einigen Plattformen LD_LIBRARY_PATH festzulegen . Wie funktioniert TARGET_PLUGIN_FOLDER ? Oder genauer, wie löst dies die dynamische Bibliothekssuche?

Danke, das ist eine gute Idee: @sanssecours können Sie BUILD_STATIC und BUILD_FULL deaktivieren und alle ( testkdb ) Tests erneut ausführen?

Wenn TARGET_PLUGIN_FOLDER leer ist, werden die Plugins dort installiert, wo die Bibliotheken sind und es wird kein RPATH oder LD_LIBRARY_PATH benötigt. Aber es würde nur helfen, wenn die installierte Elektra verwendet wird (was bei den python / lua Tests der Fall sein könnte).

https://cmake.org/Wiki/CMake_RPATH_handling sagt ".. RPATH on Mac OS X. Es wird sowohl für den Build-Tree als auch für den Installations-Tree aktiviert", also sollten eigentlich auch die Build-Tree-Binärdateien RPATH gesetzt haben. @sanssecours Können Sie das überprüfen? ZB mit readelf -a lib/libelektra-core.so.0.8.16 | grep RPATH .

Das Problem betrifft nicht RPATH selbst, sondern dlopen unter Linux beim Lesen von DT_RPATH im Vergleich zu anderen Plattformen.

man dlopen von glibc:

  • (nur ELF) Wenn die ausführbare Datei für das aufrufende Programm ein DT_RPATH-Tag und kein DT_RUNPATH-Tag enthält, werden die im DT_RPATH-Tag aufgelisteten Verzeichnisse durchsucht.
  • Wenn zum Zeitpunkt des Programmstarts die Umgebungsvariable LD_LIBRARY_PATH so definiert war, dass sie eine durch Doppelpunkte getrennte Liste von Verzeichnissen enthält, werden diese durchsucht. (Aus Sicherheitsgründen wird diese Variable für set-user-ID- und set-group-ID-Programme ignoriert.)
  • (nur ELF) Wenn die ausführbare Datei für das aufrufende Programm ein DT_RUNPATH-Tag enthält, werden die darin aufgeführten Verzeichnisse durchsucht.
  • Die Cache-Datei /etc/ld.so.cache (verwaltet von ldconfig(8)) wird daraufhin überprüft, ob sie einen Eintrag für den Dateinamen enthält.
  • Die Verzeichnisse /lib und /usr/lib werden durchsucht (in dieser Reihenfolge).

man dlopen unter OSX:

Wenn path keinen Schrägstrich enthält (dh es ist nur ein Blattname), durchsucht dlopen() Folgendes, bis es eine kompatible Mach-O-Datei findet: $LD_LIBRARY_PATH, $DYLD_LIBRARY_PATH, aktuelles Arbeitsverzeichnis, $DYLD_FALLBACK_LIBRARY_PATH.

dlopen sollte hier mit absoluten Pfaden funktionieren, oder es muss sich in einem der oben genannten Pfade befinden

Aber wir machen keine absoluten Pfade. Also keine Ahnung, wie diese Informationen helfen

Absoluter RPATH oder absolute Pfade zu Plugins? CMake behauptet, dass es Unterstützung für Build-Tree-RPATH hat, daher sollte es bei Bedarf einen absoluten RPATH verwenden.

Absolute Pfade zu Plugins sind das, was viele tun, und es wäre eine einfache Änderung, aber ich sehe nicht, wie es für die eingebauten Testfälle nicht helfen würde.

Zunächst wäre es interessant, was hier das eigentliche Problem ist. Funktioniert die installierte Version wirklich vollständig? ZB kdb run_all wäre auch interessant (neben dem, was ich oben schon geschrieben habe).

Meine Paste von dlopen manpages gibt deutlich an, worum es bei dem Problem geht.
Der Suchpfad von dlopen(libelektra-resolver.so) ist auf verschiedenen Plattformen unterschiedlich. Linux funktioniert, weil dlopen DT_RPATH der libelektra-kdb.so berücksichtigt

Es scheint, dass die Einstellung von LD_LIBRARY_PATH ist, was Valve auch tut.
https://github.com/ValveSoftware/steam-runtime/blob/master/runtime/run.sh

Sie meinen, das Problem ist, dass sie keine Dokumentation schreiben? @rpath wird dort nicht einmal erwähnt.

Ich denke, bis wir nicht wissen, was bei der Installation/mit BUILD_SHARED tatsächlich funktioniert, sollten wir nicht weiter spekulieren.

@markus2330
BEARBEITEN: Deaktivieren von BUILD_STATIC und BUILD_FULL:
die testkdb*-Tests laufen einwandfrei.

Über Dokumentation, sie erwähnen @rpath hier .

Habe meine Aussage gerade durch ein kurzes Beispiel bestätigt:

  • runtimelib ...eine Bibliothek mit einigen zufälligen Funktionen. (wie Elektro-Resolver)
  • lib ...eine Bibliothek, die runtimelib zur Laufzeit mit dlopen lädt. Es hat DT_RPATH auf das Verzeichnis von runtimelib . (wie kdb.so der Bindungen)
  • runner ...eine ausführbare Datei, die lib zur Laufzeit mit dlopen lädt (wie lua/python)

Siehe https://gist.github.com/manuelm/43a4fa9dd424b4dcf03bd1d773a0e122

Dieses Szenario funktioniert unter Linux, schlägt jedoch unter FreeBSD fehl.

Ich weiß, dass RPATH in einer Bibliothek nicht portierbar ist (es funktionierte auch nicht für musl). Aber es schien für Mac OS X zu funktionieren ( @mpranj berichtete auch, dass testkdb*-Tests gut funktionieren und @omnidan berichtete, dass kdb mit Mac OS X funktioniert). Daher habe ich darum gebeten, zu untersuchen, warum nur die Python / Lua-Tests fehlschlagen.

Der portable Weg, Elektra zu installieren, besteht nicht darin, TARGET_PLUGIN_FOLDER und für Tests könnten wir (wie vorgeschlagen) LD_LIBRARY_PATH . (Wir müssten es nur in run_memcheck und run_all setzen).

@mpranj berichtete auch, dass testkdb*-Tests gut funktionieren und @omnidan berichtete, dass kdb mit Mac OS X funktioniert

testkdb* und kdb haben DT_RPATH selbst gesetzt. Python und Lua-Interpreter nicht. Das ist grundlegend anders.

[...] und für Tests könnten wir (wie vorgeschlagen) LD_LIBRARY_PATH verwenden.

Dann füge es bitte hinzu. Vielen Dank

Ja, Sie haben Recht für das Build-System: CMake scheint RPATH für jede ausführbare Datei zu setzen, aber offensichtlich nicht für Python/lua.

Wenn es installiert ist, wird es jedoch nicht eingestellt. Also bitte bestätigt jemand, ob kdb funktioniert (mit TARGET_PLUGIN_FOLDER gesetzt).

@sanssecours können Sie BUILD_STATIC und BUILD_FULL deaktivieren und alle ( testkdb ) Tests erneut ausführen?

Das ändert sich anscheinend nicht so sehr, außer dass ninja test weniger Tests durchführt (54 statt 114). Die Tests test_kdb.lua und testpy2_kdb.py schlagen immer noch fehl. Alle anderen Tests (scheinen) zu funktionieren.

https://cmake.org/Wiki/CMake_RPATH_handling sagt ".. RPATH on Mac OS X. Es wird sowohl für den Build-Tree als auch für den Installations-Tree aktiviert", also sollten eigentlich auch die Build-Tree-Binärdateien RPATH gesetzt haben. ZB mit readelf -a lib/libelektra-core.so.0.8.16 | grep RPATH .

Ich habe den Befehl otool -l lib/libelektra-resolver.solibelektra-core.so.0.8.16 existiert nicht auf meinem Rechner. Laut Ausgabe:

…
Load command 12
          cmd LC_RPATH
      cmdsize 104
         path /Users/rene/Dropbox/Studium/Master Thesis/Configuration Parsing/Source/Elektra/build/lib (offset 12)
…

RPATH ist eingestellt.

Interessant wäre zB auch kdb run_all (neben dem, was ich oben schon geschrieben habe).

Auf meinem Computer schlagen 5 von 655 Tests fehl. 4 der Tests ( testmod_crypto , testmod_iterate , testmod_semlock und testmod_template ) schlagen aufgrund des gleichen grundlegenden Fehlers fehl:

dyld: Library not loaded: @rpath/libelektra-full.4.dylib
  Referenced from: /usr/local/lib/elektra/tool_exec/testmod_crypto
  Reason: Incompatible library version: testmod_crypto requires version 4.0.0 or later, but libelektra-full.4.dylib provides version 0.0.0
/usr/local/lib/elektra/tool_exec/run_all: line 1070: 76960 Trace/BPT trap: 5       "$KDB" $t
error: testmod_crypto

dyld: Library not loaded: @rpath/libelektra-full.4.dylib
  Referenced from: /usr/local/lib/elektra/tool_exec/testmod_iterate
  Reason: Incompatible library version: testmod_iterate requires version 4.0.0 or later, but libelektra-full.4.dylib provides version 0.0.0
/usr/local/lib/elektra/tool_exec/run_all: line 1070: 77093 Trace/BPT trap: 5       "$KDB" $t
error: testmod_iterate

dyld: Library not loaded: @rpath/libelektra-full.4.dylib
  Referenced from: /usr/local/lib/elektra/tool_exec/testmod_semlock
  Reason: Incompatible library version: testmod_semlock requires version 4.0.0 or later, but libelektra-full.4.dylib provides version 0.0.0
/usr/local/lib/elektra/tool_exec/run_all: line 1070: 77239 Trace/BPT trap: 5       "$KDB" $t
error: testmod_semlock

dyld: Library not loaded: @rpath/libelektra-full.4.dylib
  Referenced from: /usr/local/lib/elektra/tool_exec/testmod_template
  Reason: Incompatible library version: testmod_template requires version 4.0.0 or later, but libelektra-full.4.dylib provides version 0.0.0
/usr/local/lib/elektra/tool_exec/run_all: line 1070: 77272 Trace/BPT trap: 5       "$KDB" $t
error: testmod_template

Der Test testmod_python2 zeigt folgende Fehlerausgabe:

PYTHON      TESTS
==================

Testing simple variable passing...
There are 1 warnings
buffer is: warnings/#00
number: 11
description: open of plugin returned unsuccessfully (reason contains plugin, see other warnings for details)
ingroup: kdb
module:
file: ../src/libs/elektra/plugin.c
line: 297
reason: python2
reason:
reason:
../src/plugins/python2/../python/testmod_python.c:53: error in test_variable_passing: warnings in kdbOpen for plugin python2
number: 111
description: : python error
ingroup: : plugin
module: : python
at: ../src/plugins/python2/../python/python.cpp:245
reason: : Unable to import kdb module
mountpoint: :
configfile: :
../src/plugins/python2/../python/testmod_python.c:53: error in test_variable_passing: error in kdbOpen for plugin python2
../src/plugins/python2/../python/testmod_python.c:53: fatal in test_variable_passing: could not open python2 plugin
error: testmod_python2

Unten ist die Ausgabe von testmod_lua , die keine Fehler meldet.

--- running testmod_lua ---


LUA         TESTS
==================

Testing simple variable passing...
[LUA-1] open -->
[LUA-1] get
[LUA-1] <-- close
Testing loading of two active lua plugins...
[LUA-1] open -->
[LUA-2] open -->
[LUA-2] <-- close
[LUA-1] <-- close

========================================================================
NOTE: The following errors are intended. We're testing error conditions!
========================================================================
Testing return values from lua functions...
Testing lua script with syntax error...
There are 1 warnings
buffer is: warnings/#00
number: 11
description: open of plugin returned unsuccessfully (reason contains plugin, see other warnings for details)
ingroup: kdb
module:
file: ../src/libs/elektra/plugin.c
line: 297
reason: lua
reason:
reason:
number: 131
description: : lua error
ingroup: : plugin
module: : lua
at: ../src/plugins/lua/lua.cpp:80
reason: : /usr/local/share/elektra/test_data/lua/lua_plugin_wrong.lua:2: attempt to call global 'wrong' (a nil value)
mountpoint: :
configfile: :

test_lua RESULTS: 29 test(s) done. 0 error(s).

Unter OS X werden Dylibs erstellt, nicht .so. Es gibt definitiv eine libelektra-core.0.8.16.dylib oder ähnliches.

Es gibt definitiv eine libelektra-core.0.8.16.dylib oder ähnliches.

Du hast recht. Anscheinend ist RPATH nicht für libelektra-core.0.8.16.dylib , da otool -l lib/libelektra-core.0.8.16.dylib | grep RPATH keine Ausgabe anzeigt.

Don't grep-Ausgabe ist kurz oder grep in Kleinbuchstaben rpath

Don't grep-Ausgabe ist kurz oder grep in Kleinbuchstaben rpath

Meinen Sie "keine grep-Ausgabe, das ist kurz, oder grep in Kleinbuchstaben rpath"? Wenn ja, warum nicht? Ich habe auch nach RPATH in der Ausgabe von otool -l lib/libelektra-core.0.8.16.dylib über die integrierte Suche meiner Terminal-Anwendung gesucht. Dies zeigt auch kein Vorkommen von LC_RPATH .

Wenn ich nach rpath suche, sehe ich ein Vorkommen von @rpath :

...
Load command 3
          cmd LC_ID_DYLIB
      cmdsize 56
         name @rpath/libelektra-core.4.dylib (offset 24)
   time stamp 1 Thu Jan  1 01:00:01 1970
      current version 0.0.0
compatibility version 0.0.0
...

Soweit ich weiß, ist @rpath nur ein Platzhalter für (die Werte, die in) RPATH gespeichert sind. Ich glaube nicht, dass dieses Vorkommen von rpath uns sagt, ob RPATH gesetzt ist oder nicht.

Laut dem CMake-Wiki ist der Befehl otool -l <file> | grep LC_RPATH -A2 eine Möglichkeit, die RPATHs einer Datei anzuzeigen. Ich denke, die weniger schicke Version, die ich verwendet habe – otool -l lib/libelektra-core.0.8.16.dylib | grep RPATH – sollte auch mehr oder weniger in Ordnung sein.

Leute, warum überprüft ihr das überhaupt?

@sanssecours Entschuldigung, ich habe die Nachricht schnell von meinem Telefon gesendet, also habe ich nicht gesehen, dass es keinen Sinn macht.

Ich bezog mich auf otool -L das die Abhängigkeiten anzeigt und nur @rpath anzeigt. Aber ja, Sie haben Recht. otool -l ist der richtige Befehl.

Übrigens habe ich keine einzige Bibliothek in meinem System gefunden, die RPATH verwendet, außer Elektra.

/usr/local/lib/libelektra.0.8.13.dylib
          cmd LC_RPATH
      cmdsize 40
         path /usr/local/lib/elektra (offset 12)

Wie @manuelm jedoch sagt, könnten diese Überprüfungen ziemlich sinnlos sein ...

Ich glaube nicht, dass wir alle oben genannten Probleme vollständig verstehen, aber ich stimme zu, dass die Art von Remote-Debugging, die wir durchführen, nicht effizient ist. Jemand sollte untersuchen und dokumentieren, wie man nicht-glibc-Systeme am besten unterstützt. Lassen Sie uns im Meeting besprechen, wie es weitergeht.

@markus2330 Ich verstehe das Problem voll und ganz. Legen Sie LD_LIBRARY_PATH fest, bevor die Tests beginnen, und ich verspreche, dass das Problem behoben ist.

Alle anderen genannten Probleme sind Ablenkungsmanöver oder einfach nur falsch.

@manuelm Ich wollte nett sein und sagte "wir". Offensichtlich würde der LD_LIBRARY_PATH die Probleme beheben, dass keine Bibliotheken im Build-Verzeichnis gefunden werden (es sei denn, es wird irgendwo zurückgesetzt, was zumindest für Python/lua GI-Tests der Fall zu sein scheint). Aber wenn deine Theorie stimmt, dass RPATH in der Binärdatei gesetzt werden muss, wäre auch die installierte Version kaputt, was derzeit nicht wirklich bestätigt wird. Dies sollte untersucht werden.

Meine Theorie ist nicht mehr nur eine Theorie, weil ich den Beweis erbracht habe.

Noch einmal: Unter Linux funktionieren die Bindungen, weil die Bibliothek, die die Bindungen implementiert ( kdb.so für lua/python und libgelektra-4.0.so für glib) DT_RPATH gesetzt hat _AND_ dlopen ehrt dies.

Natürlich funktionieren die Bindungen, nachdem elektra in die globalen Systembibliothekspfade installiert wurde. Ich sehe absolut keinen Grund, warum das plötzlich nicht mehr funktionieren sollte.

Die Tests der Bindungen funktionieren nicht für !=linux. Das ist alles.

PS: Ich weiß, dass die GI-Bindungstests LD_LIBRARY_PATH erfordern. Deshalb wollte ich, dass Sie eine Art Build-System-Makro hinzufügen, das den GI-Fall integriert/anhängt.

Es scheint, dass die Bindungstests der einzige Ort sind, an dem der LD_LIBRARY_PATH benötigt wird, also habe ich ihn genau dort hinzugefügt.

@mpranj Hoffentlich bekommen wir bald einen Travis, der bestätigen kann, ob es funktioniert?

@markus2330 nein, es funktioniert nicht. (weder auf travis noch auf meiner Maschine)

@mpranj danke fürs testen. Haben Sie die travis-Datei bereit, um sie erneut zu testen, ohne jemanden zu stören? Beide Testfälle scheitern immer noch? Habe ich LD_LIBRARY_PATH irgendwo vergessen oder funktioniert der Ansatz einfach nicht?

@markus2330 ja, ich

Sie können es hier sehen: https://travis-ci.org/mpranj/libelektra
Und btw scheint es , wie @manuelm war ziemlich viel mit TRAVIS + OS X. getan Die Tests versagen aber travis ist eigentlich fast vollständig aufgebaut denke ich.

Ja, das hat er gesagt. Hauptsächlich fehlte das Matrix-Setup, um Mac OS X und andere mit einer Travis-Datei zu erstellen.

Vielen Dank für Ihre Hilfe, das Problem sollte jetzt behoben sein.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

markus2330 picture markus2330  ·  4Kommentare

markus2330 picture markus2330  ·  3Kommentare

markus2330 picture markus2330  ·  4Kommentare

sanssecours picture sanssecours  ·  4Kommentare

mpranj picture mpranj  ·  3Kommentare