OS Xã§test_kdb.lua
ã倱æããããã§ãã
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
lua ../src/bindings/swig/lua/tests/test_kdb.lua
ãå®è¡ãããšãã¹ã¯ãªããã¯æ»ãå€0
çµäºããŸãã è¿œå æ
å ±ãå¿
èŠãªå Žåã¯ã以äžã«ã³ã¡ã³ãããŠãã ããã
ç³ãèš³ãããŸããããç§ã¯OS Xãæã£ãŠããŸããããããã ctest -V
ã¯ããªãã®åéã§ãã
ãšããã§ã lua $file
åŒã³åºãããšã¯ããã¹ããå®è¡ããããšãšåãã§ã¯ãããŸããã ãã¹ãã§ã¯æããã«ãã«ããã£ã¬ã¯ããªã«ããã©ã€ãã©ãªã䜿çšããŠããŸãããã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããkdbã©ã€ãã©ãªã䜿çšããŠããŸãã å°ãªããšãLUA_CPATH
èšå®ããå¿
èŠããããŸãã https://github.com/ElektraInitiative/libelektra/blob/master/src/bindings/swig/lua/tests/CMakeLists.txt#L12ãåç
§ããŠ
ã¹ãŠã£ãã°é¢é£ã®ã¯ã©ãã·ã¥ã®90ïŒ ã¯ããã«ãç°å¢ã®é害ã«é¢é£ããŠããŸããã ãããã£ãŠãæåã«regenerateïŒïŒïŒ+ swigãã€ã³ãã£ã³ã°ãåã³ã³ãã€ã«ããŠã¿ãŠãã ããã
ãã®åé¡ã¯ad537b3ã«é¢é£ããŠããå¯èœæ§ããããŸãïŒå°ãªããšãLinuxã§ã¯kdb * lua | pythonãã¯ã©ãã·ã¥ããŠããŸããããLinuxã®ä¿®æ£ã¯ad537b3ã®äžéšã§ãïŒã ãã¹ãã®åºåããªããã°ãå®éã«ã¯ããããŸããã
make run_all
ã䜿çšãããšãæåãããã¹ãã±ãŒã¹ã®åºåã¯æå¶ãããŸããã倱æãããã¹ãã±ãŒã¹ã®åºåã¯è¡šç€ºãããŸãã
@sanssecoursããã«é¢ããæŽæ°ã¯ãããŸããïŒ
ãã®åé¡ã¯ad537b3ã«é¢é£ããŠããå¯èœæ§ããããŸãïŒå°ãªããšãLinuxã§ã¯kdb * lua | pythonãã¯ã©ãã·ã¥ããŠããŸããããLinuxã®ä¿®æ£ã¯ad537b3ã®äžéšã§ãïŒã ãã¹ãã®åºåããªããã°ãå®éã«ã¯ããããŸããã
@sanssecoursããã«é¢ããæŽæ°ã¯ãããŸããïŒ
è¿äºãé
ããªã£ãŠãããã ç§ã¯ãã§ã«ãã®åé¡ã«é¢ããæ¡åŒµæ
å ±ãå«ãã³ã¡ã³ããæžãããšæããŸããã testpy2_kdb.py
ãç§ã®ãã·ã³ã§å€±æãããšããããšããå§ããŸãããã ãããã£ãŠãç¹å®ã®èšå®ã«åé¡ãããå¯èœæ§ããããŸãã Homebrewçµç±ã§SWIGãã€ã³ã¹ããŒã«ããçŸåšæ¬¡ã®cmake
ã³ãã³ãã䜿çšããŠElektraã®ãã«ããã¡ã€ã«ãçæããŠããŸãã
cmake .. -GNinja -DENABLE_TESTING=ON -DCMAKE_PREFIX_PATH=/usr/local/opt/qt5 -DTOOLS='qt-gui;kdb' -DBUILD_PDF=ON -DBINDINGS=SWIG
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
Luaã¯ç§ã®ãã·ã³ã®build/lib
ãš/usr/local/lib/elektra
ã«ããlibelektra-resolver.so
ãèŠã€ããããšãã§ããªãããã§ãã ãããæ©èœãããã«ã¯ãã©ã€ãã©ãªãã¹ãèšå®ããå¿
èŠããããŸããïŒ ã¡ãªã¿ã«ãåãåé¡ãåå ã§testpy2_kdb.py
ã倱æããŠããããã§ãã
ãã€ã³ãã£ã³ã°ã¯ãå®è¡æã«elektraã©ã€ãã©ãªãããŒãããŸããã ãããã¯åãªããã€ã³ãã£ã³ã°ã§ãã ããã¯ãæ£ç¢ºãªãšã©ãŒã®å Žæã§ãã../src/libs/loader/dl.c:82
ã確èªããããšã§ç¢ºèªã§ããŸãã
ãããã£ãŠãããã¯ç°å¢ã®åé¡ãOSXã®äžè¬çãªelektraã®åé¡ããŸãã¯OSXã®ãã«ãã·ã¹ãã ã®åé¡ã®ããããã§ãã åè ã ãšæããŸãã ping @ markus2330
dlopen(libelektra-resolver.so, 2): image not found
å®éã«ã¯luaãšã¯äœã®é¢ä¿ããªãããã«èŠããŸãã
libelektra-resolver.so
ã¯ã KDB_DEFAULT_RESOLVER
ã§éžæãããªãŸã«ããŒãžã®ã·ã³ããªãã¯ãªã³ã¯ã§ããå¿
èŠããããŸããã»ããã¢ãã/ã€ã³ã¹ããŒã«ãå£ããŠããå¯èœæ§ããããŸããïŒ ã·ã³ããªãã¯ãªã³ã¯ãæ£ãããã©ããã確èªã§ããŸããïŒ
å¥åŠãªããšã«ã libelektra-resolver.so
ã¯ãã¹ãŠã®kdbé¢é£ã®ãã¹ãã±ãŒã¹ã§äœ¿çšãããŠããŸããããªããã®ãã¹ãã±ãŒã¹ã§ã¯æ©èœããªãã®ã§ããïŒ ãã¶ãããã®ãã¹ãã±ãŒã¹ïŒããã³Pythonã®ãã®ïŒã¯ããã«ããã£ã¬ã¯ããªå
ã®ã©ã€ãã©ãªã§ã¯ãªããã€ã³ã¹ããŒã«ãããã©ã€ãã©ãªã䜿çšããŸãã ãã¹ãã±ãŒã¹ãããŒãããããšããŠããlibelektra-resolver.so
ãstraceã§ç¢ºèªã§ããŸããïŒ
image not found
ã¯éåžžã«äžè¬çã§ãããã©ã€ãã©ãªå
ã«ã¢ãŒããã¯ãã£ã®ã€ã¡ãŒãžãèŠã€ãããªãå¯èœæ§ããããŸããïŒ ãã¡ãããã€ããªã䜿çšããŠããŸããïŒ
libelektra-resolver.so
ã¯ãKDB_DEFAULT_RESOLVER
ã§éžæãããªãŸã«ããŒãžã®ã·ã³ããªãã¯ãªã³ã¯ã§ããå¿ èŠããããŸããã»ããã¢ãã/ã€ã³ã¹ããŒã«ãå£ããŠããå¯èœæ§ããããŸããïŒ
ããŒã«ã«ã®Elektraã€ã³ã¹ããŒã«ãå£ããŠãããã©ããã確èªããç°¡åãªæ¹æ³ã¯ãããŸããïŒ ã³ãã³ãkdb
ã¯æ©èœããŠããããã§ãã
ã·ã³ããªãã¯ãªã³ã¯ãæ£ãããã©ããã確èªã§ããŸããïŒ
äž¡æ¹ã®libelektra-resolver.so
ãšã€ãªã¢ã¹ã¯ããšã€ãªã¢ã¹ãšåããã£ã¬ã¯ããªã«ãããã¡ã€ã«libelektra-resolver_fm_hpu_b.so
ã«ãªã³ã¯ããŠããŸãã ãããã£ãŠããããã¯æ£ããããã«èŠããŸãã
ãã¹ãã±ãŒã¹ãããŒãããããšããŠãã
libelektra-resolver.so
ãstraceã§ç¢ºèªã§ããŸããïŒ
sudo dtruss ctest -V -R test_kdb.lua
ãè©ŠããŸããã åºåã¯æ¬¡ã®ãšããã§ãã
test_kdb.lua-dtrussOutput.txt ã ãã¹ãã§ã¯ãã«ããã£ã¬ã¯ããªã®ElektraããŒãžã§ã³ã䜿çšããŠããããã§ãã sudo ninja uninstall
ãä»ããŠElektraãã¢ã³ã€ã³ã¹ããŒã«ããŸããã ãã®åŸãããäžåºŠãã¹ããå®è¡ããŸããã åºåã¯åãã§ãã
ãã¡ãããã€ããªã䜿çšããŠããŸããïŒ
ç§ãç¥ã£ãŠããããšã§ã¯ãããŸããã
OSX El Capitanã䜿çšããŠããŸããïŒ ããã¯ãå¥åŠãªã·ã¹ãã æŽåæ§ä¿è·ã®åé¡ã§ããå¯èœæ§ããããŸãã
kdb
æ©èœããã®ã¯ã¡ãã£ãšå¥åŠã§ãã
python / luaã®ã€ã³ã¹ããŒã«ãåå ã§ã·ã¹ãã æŽåæ§ä¿è·ã«é¢ä¿ããŠããå Žåã¯ããããçã«ããªã£ãŠããå¯èœæ§ããããŸãã
OSX El Capitanã䜿çšããŠããŸããïŒ ããã¯ãå¥åŠãªã·ã¹ãã æŽåæ§ä¿è·ã®åé¡ã§ããå¯èœæ§ããããŸãã
ã¯ããOS X10.11.4ã䜿çšããŠããŸãã SIPãäžæçã«ç¡å¹ã«ããŠããã¹ããåå®è¡ããŸããã ããã§ãåãåé¡ã ãã ããSIPãç¡å¹ã«ããåŸã倱æããæ°ãããã¹ãtestscr_check_kdb_internal_suite
ã ãããŠä»ã testscr_check_merge
ãããæ©èœããŸããð¢ã
0.8.16ã«æ»ãããã«ããã£ã¬ã¯ããªãã¯ãªãŒã³ã¢ããããŠã ninja test
å床å®è¡ããŸããã testscr_check_kdb_internal_suite
ãštestscr_check_merge
ã¯ã©ã¡ãã倱æããŸãããElektra 0.8.16ããªãªãŒã¹ããããšããå°ãªããšãtestscr_check_kdb_internal_suite
æ©èœããããšãèŠããŠããŸãã çŸåšã倱æããŠããè¿œå ã®ãã¹ãã®åºåã¯æ¬¡ã®ãšããã§ãã
testscr_check_kdb_internal_suite.txt
testscr_check_merge.txt
ã¿ã€ãã«ãå€æŽããŠèªåãåé€ããŸããã ç§ã¯OSXãã·ã³ã«çŽæ¥ã¢ã¯ã»ã¹ã§ãããæ·±ãç¥èãäžè¶³ããŠããŸãã çªãæ©æ¢°ããªããã°ãããã¹ãåºåããã¯äœãããããŸããã
ãªã³ã¯ã®ä»ã®ãã³ããèŠãŸãããïŒ ããšãã°ãpython / luaãåã€ã³ã¹ããŒã«ããŸããïŒ
@ petermax2 @mpranjãããã®åé¡ãåçŸã§ããŸããïŒ
ãªã³ã¯ã®ä»ã®ãã³ããèŠãŸãããïŒ ããšãã°ãpython / luaãåã€ã³ã¹ããŒã«ããŸããïŒ
ç³ãèš³ãããŸããããããã§ã¯ãããŸããã Python 2ã®ã€ã³ã¹ããŒã«ã¯ãã·ã¹ãã ã«ä»å±ããŠãããã®ã§ãã åã€ã³ã¹ããŒã«ããã«ã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã å šäœãåã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
LuaElektraãã©ã°ã€ã³ããã¹ãããããã ãã«Luaãã€ã³ã¹ããŒã«ããŸããã ãããã£ãŠãåã€ã³ã¹ããŒã«ã¯ããŸãæå³ããªããšæããŸãã ãã ããæ°ç§ããããããªãããã brew reinstall lua
ãå®è¡ããŸããã ãã®åŸãã¯ãªãŒã³ãªãã«ããã£ã¬ã¯ããªããå§ããŠããã«ãã³ãã³ããšctest -VV -R test_kdb.lua
ã ãã¹ãã§ãåãåºåã衚瀺ãããŸãã
ã¡ãªã¿ã«ã /etc/kdb
ãããã¹ãŠã®ãã¡ã€ã«ãåé€ããåŸããã¹ãtestscr_check_kdb_internal_suite
ãštestscr_check_merge
ãæ£ããæ©èœããããã«ãªããŸããã
ç§ã¯çŸåšãå¥ã®èããæã£ãŠããŸããã ïŒæéã®ãããåé¡ã®åãåããé€ãïŒdlopenåŒã³åºãããæ©èœããªãæå°éã®äŸã«æžããããïŒãããã£ãŠã誰ããåé¡ãåçŸã§ãããã©ãããåŸ ã€ã®ãæåãããããŸããããããããåé¡ã«æ°ããªå ãåœãŠãã§ãããã
èªåã®ãã·ã³ã§ãåãåäœã確èªã§ããŸãã
解決çïŒã©ã€ãã©ãªãã¹ãæ£ããèšå®ããŸããäŸïŒ
LD_LIBRARY_PATH="/Users/mpranj/workspace/libelektra/build/lib" ctest -V -R test_kdb.lua
ã¯ç§ã«ãšã£ãŠã¯åé¡ãªãåäœããŸãã
OS Xã®dlopen
ã¯$LD_LIBRARY_PATH, $DYLD_LIBRARY_PATH, current working directory, $DYLD_FALLBACK_LIBRARY_PATH
æ€çŽ¢ããŸããããã®é åºã ãšæããŸãã
PRïŒ710ã§ä¿®æ£ãããŸããããä¿®æ£ãéåžžã«ã¯ãªãŒã³ãã©ããã¯ããããŸããã
ããããä¿®æ£ã¯ééããªãã¯ãªãŒã³ã§ã¯ãããŸããã
ç§ãèŠããŠããéããç§ãã¡ã®ãã¹ãã¯DT_RPATH
ãlibelektra-kdb.so
ã«èšå®ãããŠããããšã«äŸåããŠããŸãã ãããOSXã§å©çšã§ããªãå Žåã¯ãã°ããŒãã«ãã«ãç°å¢ã®å Žæã§ãããå®çŸ©ããå¿
èŠããããŸãã
ç·šéïŒããããèŠã€ããŠãããŠããããšãïŒ
RPATH
ã¯ãã¹ãŠã®ã³ã¢ã©ã€ãã©ãªã«èšå®ãããŠããŸãããããããlibelektra-core
ã§ååã§ãããã®å Žæã§dlopen
ãçºçããŸãã
image not found
åã«ã©ã€ãã©ãªãèŠã€ãããªãããšãæå³ããŸããïŒ ãããããªãããªãRPATH
ãluaãšpythonã®ãã¹ã以å€ã®ãã¹ãŠã§æ©èœããã®ãèããŠã¿ãŠãã ããã
åèãŸã§ã«ïŒElektraã¯ã TARGET_PLUGIN_FOLDER
ã空ã®æååã«èšå®ããã ãã§ã RPATH
ãªãã·ã¹ãã ïŒããšãã°ãlibcãšããŠmuslã䜿çšããopenwrtïŒããµããŒãããŸãã
FreeBSDã§ãåæ§ã®ããšãèµ·ãã£ãŠããããã§ãã
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:
FreeBSDã§luaããŸã ãã§ãã¯ã§ããŠããŸããã
@mpranjã¯ç¥ã£ãŠkdb
ãã¹ãã±ãŒã¹ãškdb
ã³ãã³ãã©ã€ã³ããŒã«ã¯æ©èœããŸããïŒ
FreeBSDã§åäœããªããã¹ãã±ãŒã¹ã«é¢ããåé¡ãéããããOpenBSDã®åé¡ã«è¿œå ãããã§ããŸããïŒ
ããªããããããæå³ãããªãã°ïŒ
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
...ãããŠã¯ãã kdb
ããŒã«ã¯æ©èœããŠããããã§ãïŒlsã§ç°¡åã«ç¢ºèªããŠãã ããïŒã
ããã§ãªããã°ãå€ãã®ããšã倱æããŠããŸãããä»æ¥ã¯ãã¹ãŠããã§ãã¯/å ±åããããšãã§ããŸããã ããããé©åã«ãã¹ãã§ããããå¿ ããã¹ãŠãå ±åããŸãã
ç§ã®æšæž¬ã§ã¯ãkdbãã¹ãã¯éçã«ãªã³ã¯ãããŠãããããæ©èœããŸãããïŒ
BUILD_STATIC
ãç¡å¹ã«ãããšããã¹ããæ©èœããŸããã
@ markus2330äžéšã®ãã©ãããã©ãŒã ã§LD_LIBRARY_PATH
ã TARGET_PLUGIN_FOLDER
ã¯ã©ã®ããã«æ©èœããŠããŸããïŒ ãŸãã¯ãããå
·äœçã«ã¯ãããã¯ãã€ãããã¯ã©ã€ãã©ãªæ€çŽ¢ãã©ã®ããã«è§£æ±ºããŸããïŒ
ããããšãããããŸãã @ sanssecoursã§BUILD_STATICãšBUILD_FULLãç¡å¹ã«ããŠããã¹ãŠã®ïŒ testkdb
ïŒãã¹ããåå®è¡ã§ããŸããïŒ
TARGET_PLUGIN_FOLDERã空ã®å Žåããã©ã°ã€ã³ã¯ã©ã€ãã©ãªãããå Žæã«ã€ã³ã¹ããŒã«ããã RPATH
ãŸãã¯LD_LIBRARY_PATH
ã¯å¿
èŠãããŸããã ãã ããã€ã³ã¹ããŒã«ãããŠããElektraã䜿çšããå Žåã«ã®ã¿åœ¹ç«ã¡ãŸãïŒããã¯ã python
/ lua
ãã¹ãã®å Žåã«åœãŠã¯ãŸããŸãïŒã
https://cmake.org/Wiki/CMake_RPATH_handlingã«ã¯ãã.. Mac OS Xã§ã¯RPATHãæå¹ã«ãªããŸãããã«ãããªãŒãšã€ã³ã¹ããŒã«ããªãŒã®äž¡æ¹ã§æå¹ã«ãªããŸãããšèšèŒãããŠãããããå®éã«ã¯ãã«ãããªãŒãã€ããªã«ãRPATHãèšå®ããå¿
èŠããããŸãã @sanssecoursããã確èªã§ããŸããïŒ ããšãã°ã readelf -a lib/libelektra-core.so.0.8.16 | grep RPATH
ãŸãã
åé¡ã¯RPATHèªäœã«é¢ãããã®ã§ã¯ãªããLinuxã§DT_RPATHãšä»ã®ãã©ãããã©ãŒã ãèªã¿åãå Žåã®dlopen
ã«é¢ãããã®ã§ãã
glibcããã®man dlopen
ïŒ
- ïŒELFã®ã¿ïŒåŒã³åºãåŽããã°ã©ã ã®å®è¡å¯èœãã¡ã€ã«ã«DT_RPATHã¿ã°ãå«ãŸããŠããŠãDT_RUNPATHã¿ã°ãå«ãŸããŠããªãå ŽåãDT_RPATHã¿ã°ã«ãªã¹ããããŠãããã£ã¬ã¯ããªãŒãæ€çŽ¢ãããŸãã
- ããã°ã©ã ã®éå§æã«ãç°å¢å€æ°LD_LIBRARY_PATHããã³ãã³ã§åºåããããã£ã¬ã¯ããªãŒã®ãªã¹ããå«ãããã«å®çŸ©ãããŠããå Žåãããããæ€çŽ¢ãããŸãã ïŒã»ãã¥ãªãã£å¯ŸçãšããŠããã®å€æ°ã¯set-user-IDããã³set-group-IDããã°ã©ã ã§ã¯ç¡èŠãããŸããïŒ
- ïŒELFã®ã¿ïŒåŒã³åºãåŽããã°ã©ã ã®å®è¡å¯èœãã¡ã€ã«ã«DT_RUNPATHã¿ã°ãå«ãŸããŠããå Žåããã®ã¿ã°ã«ãªã¹ããããŠãããã£ã¬ã¯ããªãŒãæ€çŽ¢ãããŸãã
- ãã£ãã·ã¥ãã¡ã€ã«/etc/ld.so.cacheïŒldconfigïŒ8ïŒã«ãã£ãŠç¶æãããïŒã¯ããã¡ã€ã«åã®ãšã³ããªãå«ãŸããŠãããã©ããã確èªããããã«ãã§ãã¯ãããŸãã
- ãã£ã¬ã¯ããª/ libããã³/ usr / libãïŒãã®é åºã§ïŒæ€çŽ¢ãããŸãã
OSXã®man dlopen
ïŒ
ãã¹ã«ã¹ã©ãã·ã¥æåãå«ãŸããŠããªãå ŽåïŒã€ãŸããåã«ãªãŒãåã§ããå ŽåïŒãdlopenïŒïŒã¯ãäºææ§ã®ããMach-Oãã¡ã€ã«ãèŠã€ãããŸã§ã$ LD_LIBRARY_PATHã$ DYLD_LIBRARY_PATHãçŸåšã®äœæ¥ãã£ã¬ã¯ããªã$ DYLD_FALLBACK_LIBRARY_PATHãæ€çŽ¢ããŸãã
dlopenã¯ããã§çµ¶å¯Ÿãã¹ã§æ©èœããããäžèšã®ãã¹ã®1ã€ã«ããå¿ èŠããããŸã
ãã ãã絶察ãã¹ã¯å®è¡ããŸããã ãããã£ãŠããã®æ å ±ãã©ã®ããã«åœ¹ç«ã€ãããããŸãã
ãã©ã°ã€ã³ãžã®çµ¶å¯ŸRPATHãŸãã¯çµ¶å¯Ÿãã¹ïŒ CMakeã¯ããã«ãããªãŒRPATHããµããŒãããŠãããšäž»åŒµããŠãããããå¿ èŠã«å¿ããŠçµ¶å¯ŸRPATHã䜿çšããå¿ èŠããããŸãã
ãã©ã°ã€ã³ãžã®çµ¶å¯Ÿãã¹ã¯å€ãã®äººãè¡ãããšã§ãããç°¡åã«å€æŽã§ããŸããããã«ãå ã®ãã¹ãã±ãŒã¹ã«ã©ã®ããã«åœ¹ç«ããªããã¯ããããŸããã
ãŸããå®éã®åé¡ãããã«ããã®ã¯èå³æ·±ãããšã§ãã ã€ã³ã¹ããŒã«ãããããŒãžã§ã³ã¯æ¬åœã«å®å
šã«æ©èœããŸããïŒ ããšãã°ã kdb run_all
ãèå³æ·±ãã§ãããïŒç§ããã§ã«äžã§æžãããã®ã®é£ã«ïŒã
dlopenã®ãã³ããŒãžããã®ç§ã®è²Œãä»ãã¯ãåé¡ãäœã§ããããæ確ã«è¿°ã¹ãŠããŸãã
dlopenïŒlibelektra-resolver.soïŒã®æ€çŽ¢ãã¹ã¯ããã©ãããã©ãŒã ã«ãã£ãŠç°ãªããŸãã Linuxã¯ãdlopenãlibelektra-kdb.soã®DT_RPATHãå°éããããã«æ©èœããŸãã
LD_LIBRARY_PATH
ã¯ãvalveãè¡ã£ãŠããããšã®ããã§ãã
https://github.com/ValveSoftware/steam-runtime/blob/master/runtime/run.sh
åé¡ã¯åœŒããããã¥ã¡ã³ããæžããªããšããããšã§ããïŒ @rpath
ã¯ããã«ãèšåãããŠããŸããã
ã€ã³ã¹ããŒã«æ/ BUILD_SHAREDã§å®éã«äœãæ©èœããããããããªããªããŸã§ããã以äžæšæž¬ããã¹ãã§ã¯ãªããšæããŸãã
@ markus2330
ç·šéïŒBUILD_STATICãšBUILD_FULLãç¡å¹ã«ããïŒ
testkdb *ãã¹ãã¯æ£åžžã«å®è¡ãããŸãã
çãäŸã§ç§ã®ã¹ããŒãã¡ã³ããæ€èšŒããŸããïŒ
runtimelib
...ããã€ãã®ã©ã³ãã ãªé¢æ°ãæäŸããã©ã€ãã©ãªã ïŒelektra-resolverã®ããã«ïŒlib
... dlopen
ã䜿çšããŠå®è¡æã«runtimelib
ãããŒãããã©ã€ãã©ãªã DT_RPATHãruntimelib
ã®ãã£ã¬ã¯ããªã«èšå®ãããŠããŸãã ïŒãã€ã³ãã£ã³ã°ã®kdb.soã®ããã«ïŒrunner
... dlopen
ã䜿çšããŠå®è¡æã«lib
ãããŒãããå®è¡å¯èœãã¡ã€ã«ïŒlua / pythonãªã©ïŒhttps://gist.github.com/manuelm/43a4fa9dd424b4dcf03bd1d773a0e122ãåç §ããŠ
ãã®ã·ããªãªã¯Linuxã§æ©èœããŸãããFreeBSDã§ã¯å€±æããŸãã
ã©ã€ãã©ãªã«èšå®ãããRPATHã¯ç§»æ€æ§ããªãããšãç¥ã£ãŠããŸãïŒmuslã§ãæ©èœããŸããã§ããïŒã ããããããã¯Mac OS Xã§æ©èœããããã§ããïŒ æ©èœããããšãå ±åãã @ omnidanã¯kdb
ãMac OS Xã§æ©èœããããšãå ±åããŸããïŒã ãããã£ãŠããªãpython / luaãã¹ãã ãã倱æããã®ãã調æ»ããããã«äŸé ŒããŸããã
Elektraãã€ã³ã¹ããŒã«ããããã®ããŒã¿ãã«ãªæ¹æ³ã¯ã TARGET_PLUGIN_FOLDER
ãèšå®ããããšã§ã¯ãªãããã¹ãã«ã¯ïŒææ¡ãããŠããããã«ïŒ LD_LIBRARY_PATH
䜿çšã§ããŸãã ïŒrun_memcheckãšrun_allå
ã§ã®ã¿èšå®ããå¿
èŠããããŸãïŒã
@mpranjã¯ãtestkdb *ãã¹ããæ£åžžã«omnââidanã¯ãkdbãMac
testkdb*
ãškdb
ã¯ãDT_RPATHã§èªåã§èšå®ããŸãã Pythonãšluaã€ã³ã¿ãŒããªã¿ãŒã¯ããã§ã¯ãããŸããã ããã¯æ ¹æ¬çã«ç°ãªããŸãã
[...]ãããŠãã¹ãã«ã¯ïŒææ¡ãããŠããããã«ïŒLD_LIBRARY_PATHã䜿çšã§ããŸãã
次ã«è¿œå ããŠãã ããã ããããšã
ã¯ããããªãã¯ãã«ãã·ã¹ãã ã«é©ããŠããŸããCMakeã¯ãã¹ãŠã®å®è¡å¯èœãã¡ã€ã«ã«RPATHãèšå®ããŠããããã§ãããæããã«python / luaã«ã¯èšå®ãããŠããŸããã
ãã ããã€ã³ã¹ããŒã«ãããšèšå®ãããŸããã ãããã£ãŠã誰ããkdb
æ©èœãããã©ããã確èªããŠãã ããïŒ TARGET_PLUGIN_FOLDER
èšå®ãããŠããŸãïŒã
@sanssecours BUILD_STATICãšBUILD_FULLãç¡å¹ã«ããŠããã¹ãŠã®ïŒ
testkdb
ïŒãã¹ããåå®è¡ã§ããŸããïŒ
ninja test
ãå®è¡ãããã¹ããå°ãªãïŒ114ã§ã¯ãªã54ïŒããšãé€ããŠãããã¯ããã»ã©å€ãããªãããã«èŠããŸãã ãã¹ãtest_kdb.lua
ãštestpy2_kdb.py
ãŸã 倱æããŸãã ä»ã®ãã¹ãŠã®ãã¹ãïŒåäœããããã§ãïŒã
https://cmake.org/Wiki/CMake_RPATH_handlingã«ã¯ãã.. Mac OS Xã§ã¯RPATHãæå¹ã«ãªããŸãããã«ãããªãŒãšã€ã³ã¹ããŒã«ããªãŒã®äž¡æ¹ã§æå¹ã«ãªããŸãããšèšèŒãããŠãããããå®éã«ã¯ãã«ãããªãŒãã€ããªã«ãRPATHãèšå®ããå¿ èŠããããŸãã ããšãã°ã
readelf -a lib/libelektra-core.so.0.8.16 | grep RPATH
ãŸãã
ã³ãã³ãotool -l lib/libelektra-resolver.so
ã䜿çšããŸããâ libelektra-core.so.0.8.16
ã¯ç§ã®ãã·ã³ã«ååšããŸããã åºåã«ãããšïŒ
âŠ
Load command 12
cmd LC_RPATH
cmdsize 104
path /Users/rene/Dropbox/Studium/Master Thesis/Configuration Parsing/Source/Elektra/build/lib (offset 12)
âŠ
RPATH
ãèšå®ãããŸãã
ããšãã°ãkdb run_allãèå³æ·±ãã§ãããïŒç§ããã§ã«äžã§æžãããã®ã®é£ã«ïŒã
ç§ã®ãã·ã³ã§ã¯ã655åã®ãã¹ãã®ãã¡5åã倱æããŸãã 4ã€ã®ãã¹ãïŒ testmod_crypto
ã testmod_iterate
ã testmod_semlock
ã testmod_template
ïŒã¯ãåãåºæ¬ãšã©ãŒã®ããã«å€±æããŸãã
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
ãã¹ãtestmod_python2
ã¯ã次ã®ãšã©ãŒåºåã瀺ããŠããŸãã
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
以äžã¯testmod_lua
ã®åºåã§ããšã©ãŒã¯å ±åãããŠããŸããã
--- 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).
OS Xã§ã¯ã.soã§ã¯ãªãdylibãäœæãããŸãã ééããªãlibelektra-core.0.8.16.dylibãŸãã¯åæ§ã®ãã®ããããŸãã
ééããªãlibelektra-core.0.8.16.dylibãŸãã¯åæ§ã®ãã®ããããŸãã
ããªããæ£ããã§ãã otool -l lib/libelektra-core.0.8.16.dylib | grep RPATH
ã¯åºåã衚瀺ããªãããã RPATH
ãlibelektra-core.0.8.16.dylib
ã«èšå®ãããŠããªãããã§ãã
grepã®åºåãçãããŸãã¯grepã®å°æåã®rpathã䜿çšããªãã§ãã ãã
grepã®åºåãçãããŸãã¯grepã®å°æåã®rpathã䜿çšããªãã§ãã ãã
ãåºåãgrepããªããã€ãŸãçãããŸãã¯å°æåã®rpathãgrepããªãããšããæå³ã§ããïŒ ãããããªãããªãã§ããïŒ ç§ã¯ãŸããæ€çŽ¢RPATH
ã®åºåã«otool -l lib/libelektra-core.0.8.16.dylib
ãçµç±ããŠãçµã¿èŸŒã¿ã®ç§ã®ã¿ãŒããã«ã¢ããªã±ãŒã·ã§ã³ã®æ€çŽ¢ã ããã¯ã LC_RPATH
ã®çºçã瀺ããŠããŸããã
ç§ãæ€çŽ¢ããå Žårpath
ããã®åŸãç§ã¯æ¬¡ã®ããããçºçã芧@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
...
ç§ã®ç¥ãéãã @rpath
ã¯ïŒã«æ ŒçŽãããŠããå€ïŒ RPATH
ãã¬ãŒã¹ãã«ããŒã«ãããŸããã ãã®rpath
åºçŸã¯ã RPATH
ãèšå®ãããŠãããã©ãããæããŠããããšã¯æããŸããã
CMake wikiã«ãããšãã³ãã³ãotool -l <file> | grep LC_RPATH -A2
ã¯ããããã¡ã€ã«ã®RPATHã衚瀺ãã1ã€ã®å¯èœãªæ¹æ³ã§ãã ç§ã䜿çšããããŸã掟æã§ãªãããŒãžã§ã³â otool -l lib/libelektra-core.0.8.16.dylib | grep RPATH
âãå€ããå°ãªããããŸãããã¯ãã ãšæããŸãã
ã¿ããªãã©ãããŠããããã§ãã¯ããŠããã®ïŒ
@sanssecoursç³ãèš³ãããŸããããé»è©±ããããã«ã¡ãã»ãŒãžãéä¿¡ããã®ã§ãæå³ããªãããšãããããŸããã§ããã
äŸåé¢ä¿ã瀺ãã @rpath
ã®ã¿ã衚瀺ããotool -L
ã@rpath
ã ããããããã§ããããªãã¯æ£ããã§ãotool -l
ã¯æ£ããã³ãã³ãã§ãã
ãšããã§ããšã¬ã¯ãã©ãé€ããŠãRPATHã䜿çšããŠããã©ã€ãã©ãªãã·ã¹ãã ã«1ã€ãèŠã€ãããŸããã§ããã
/usr/local/lib/libelektra.0.8.13.dylib
cmd LC_RPATH
cmdsize 40
path /usr/local/lib/elektra (offset 12)
@manuelmãè¿°ã¹ãŠããããã«ããããã®ãã§ãã¯ã¯ããªãç¡æå³ãããããŸãã...
äžèšã®ãã¹ãŠã®åé¡ãå®å šã«ç解ããŠãããšã¯æããŸããããç§ãã¡ãè¡ã£ãŠããçš®é¡ã®ãªã¢ãŒããããã°ã¯å¹ççã§ã¯ãªãããšã«åæããŸãã 誰ããéglibcã·ã¹ãã ããµããŒãããããã®æè¯ã®æ¹æ³ã調æ»ããŠææžåããå¿ èŠããããŸãã äŒè°ã§ã©ã®ããã«é²ãããã«ã€ããŠè©±ãåããŸãããã
@ markus2330ç§ã¯ãã®åé¡ãå®å šã«ç解ããŠããŸãã ãã¹ããéå§ããåã«LD_LIBRARY_PATHãèšå®ãããšãåé¡ããªããªãããšãçŽæããŸãã
ä»ã®ãã¹ãŠã®èšåãããåé¡ã¯ãèµ€ããã·ã³ã§ãããããŸãã¯åã«ééã£ãŠããŸãã
@manuelmçŽ æµã«ãªãããã£ãã®ã§ããç§ãã¡ããšèšããŸããã æããã«ãLD_LIBRARY_PATHã¯ããã«ããã£ã¬ã¯ããªã§ã©ã€ãã©ãªãèŠã€ãããªããšããåé¡ãä¿®æ£ããŸãïŒå°ãªããšãpython / lua GIãã¹ãã®å Žåã®ããã«ãã©ããã§ãªã»ãããããªãéãïŒã ããããRPATHããã€ããªã«èšå®ããå¿ èŠããããšããçè«ãæ£ãããã°ãã€ã³ã¹ããŒã«ãããŠããããŒãžã§ã³ãå£ããŠããŸããŸãããããã¯çŸåšå®éã«ã¯ç¢ºèªãããŠããŸããã ããã¯èª¿æ»ããå¿ èŠããããŸãã
ç§ã®çè«ã¯ã蚌æãè¡ã£ãã®ã§ããã¯ãåãªãçè«ã§ã¯ãããŸããã
ããäžåºŠïŒLinuxã§ã¯ããã€ã³ãã£ã³ã°ãå®è£
ããã©ã€ãã©ãªïŒlua / pythonã®å Žåã¯kdb.so
libgelektra-4.0.so
ãglibã®å Žåã¯DT_RPATH
èšå®ãããŠããããããã€ã³ãã£ã³ã°ã¯æ©èœããŸã_AND_ dlopen
ãããå°éããŸãã
ãã¡ããããã€ã³ãã£ã³ã°ã¯ãelektraãã°ããŒãã«ã·ã¹ãã ã©ã€ãã©ãªãã¹ã«ã€ã³ã¹ããŒã«ãããåŸã«æ©èœããŸãã ãããçªç¶æ©èœããªããªãçç±ã¯ãŸã£ããããããŸããã
ãã€ã³ãã£ã³ã°ã®ãã¹ãã¯ïŒ= linuxã§ã¯æ©èœããŸããã ããã§å šéšã§ãã
PSïŒGIãã€ã³ãã£ã³ã°ãã¹ãã«ã¯LD_LIBRARY_PATHãå¿ èŠã§ãã ãã®ãããGIã±ãŒã¹ãçµ±å/è¿œå ãããã«ãã·ã¹ãã ãã¯ããè¿œå ããŠã»ãããšæããŸããã
LD_LIBRARY_PATHãå¿ èŠãªã®ã¯ãã€ã³ãã£ã³ã°ãã¹ãã ãã®ããã§ãã®ã§ãããã«è¿œå ããŸããã
@mpranjããŸãããã°ããããæ©èœãããã©ããã確èªã§ãããã©ãã¹ãããã«å ¥æã§ããŸããïŒ
@ markus2330ãããããã¯æ©èœããŸããã ïŒtravisã§ãç§ã®ãã·ã³ã§ããããŸããïŒ
@mpranjãã¹ãããŠãããŠããããšãã 誰ãã«è¿·æããããã«travisãã¡ã€ã«ãå床ãã¹ãããæºåãã§ããŠããŸããïŒ äž¡æ¹ã®ãã¹ãã±ãŒã¹ã¯ãŸã 倱æããŠããŸããïŒ LD_LIBRARY_PATHãã©ããã§å¿ããŸãããããããšãã¢ãããŒããæ©èœããŠããŸãããïŒ
@ markus2330ã¯ãç§ã¯çŸåš
ããªãã¯ããã§ãããèŠãããšãã§ããŸãïŒ https ïŒ
ãšããã§ã @ manuelmã¯
ã¯ãã圌ã¯ããèšã£ãã äž»ã«ã1ã€ã®travisãã¡ã€ã«ã§Mac OSXãªã©ããã«ãããããã®ãããªãã¯ã¹ã»ããã¢ããããããŸããã§ããã
ãã¹ãŠã®ãååã«æè¬ããŸããåé¡ã¯ä»ããä¿®æ£ãããã¯ãã§ãã