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
ํธ์ถํ๋ btw๋ ํ
์คํธ๋ฅผ ์คํํ๋ ๊ฒ๊ณผ ๋์ผํ์ง ์์ต๋๋ค. ํ
์คํธ๋ ๋ถ๋ช
ํ ๋น๋ ๋๋ ํ ๋ฆฌ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋์ ์์คํ
์ ์ค์น๋ kdb ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ต์ํ LUA_CPATH
์ค์ ํด์ผ ํฉ๋๋ค. https://github.com/ElektraInitiative/libelektra/blob/master/src/bindings/swig/lua/tests/CMakeLists.txt#L12 ์ฐธ์กฐ
swig ๊ด๋ จ ์ถฉ๋์ 90%๋ ๋น๋ ํ๊ฒฝ ๊ฒฐํจ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ๋จผ์ 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์ ๋น๋ ์์คํ ๋ฌธ์ ์ ๋๋ค. ๋๋ ์ ์๋ฅผ ์์ฌํ๋ค. ํ @markus2330
dlopen(libelektra-resolver.so, 2): image not found
์ค์ ๋ก lua์ ์๋ฌด ๊ด๋ จ์ด ์๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค.
libelektra-resolver.so
๋ KDB_DEFAULT_RESOLVER
์ ํํ ๋ฆฌ์กธ๋ฒ์ ๋ํ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ฌ์ผ ํฉ๋๋ค. ์ค์ /์ค์น๊ฐ ์์๋์์ ์ ์์ต๋๊น? ์ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ ์ ์์ต๋๊น?
์ด์ํ ์ ์: libelektra-resolver.so
๊ฐ ๋ชจ๋ kdb ๊ด๋ จ ํ
์คํธ ์ผ์ด์ค์์ ์ฌ์ฉ๋๋๋ฐ, ์ ์ด ํ
์คํธ ์ผ์ด์ค์์๋ง ์๋ _ํ์ง_ํฉ๋๊น? ์๋ง๋ ์ด ํ
์คํธ ์ผ์ด์ค(๊ทธ๋ฆฌ๊ณ ํ์ด์ฌ ์ผ์ด์ค)๋ ๋น๋ ๋๋ ํ ๋ฆฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ์ค์น๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. 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 - dtruss Output.txt . ํ
์คํธ์์ ๋น๋ ๋๋ ํ ๋ฆฌ์ Elektra ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ต๋๋ค. sudo ninja uninstall
๋ฅผ ํตํด Elektra๋ฅผ ์ ๊ฑฐํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ
์คํธ๋ฅผ ๋ค์ ์คํํ์ต๋๋ค. ์ถ๋ ฅ์ ์ฌ์ ํ โโ๋์ผํฉ๋๋ค.
ํป ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๊น?
์ ๊ฐ ์๊ณ ์๋ ๊ฒ์ ์๋๋๋ค.
OSX El Capitan์ ์ฌ์ฉํฉ๋๊น? ์ด์ํ ์์คํ ๋ฌด๊ฒฐ์ฑ ๋ณดํธ ๋ฌธ์ ์ผ ์ ์์ต๋๋ค.
๊ทธ๋๋ kdb
์๋ํ๋ค๋ ๊ฒ์ ์ข ์ด์ํฉ๋๋ค.
python/lua ์ค์น๋ก ์ธํด ์์คํ ๋ฌด๊ฒฐ์ฑ ๋ณดํธ์ ๊ด๋ จ์ด ์๋ ๊ฒฝ์ฐ ์๋ฏธ๊ฐ ์์ ์ ์์ต๋๋ค.
OSX El Capitan์ ์ฌ์ฉํฉ๋๊น? ์ด์ํ ์์คํ ๋ฌด๊ฒฐ์ฑ ๋ณดํธ ๋ฌธ์ ์ผ ์ ์์ต๋๋ค.
์, OS X 10.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
์๋ํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํฉ๋๋ค. ๋ค์์ ํ์ฌ ์คํจํ ์ถ๊ฐ ํ
์คํธ์ ์ถ๋ ฅ์
๋๋ค.
testcr_check_kdb_internal_suite.txt
testcr_check_merge.txt
์ ๋ชฉ์ ๋ณ๊ฒฝํ๊ณ ์ญ์ ํ์ต๋๋ค. ๋๋ OSX ๋จธ์ ์ ์ง์ ์ ๊ทผํ ์ ์๊ณ ๊น์ด ์๋ ์ง์์ด ๋ถ์กฑํฉ๋๋ค. ์ฃผ๋ณ์ ์ฐ๋ฅด๋ ๊ธฐ๊ณ๊ฐ ์์ผ๋ฉด ํ ์คํธ ์ถ๋ ฅ์์ โโ์๋ฌด๊ฒ๋ ๋งํ ์ ์์ต๋๋ค.
๋งํฌ์ ๋ค๋ฅธ ํํธ๋ ๋ณด์ จ๋์? ์๋ฅผ ๋ค์ด python/lua๋ฅผ ๋ค์ ์ค์นํ์๊ฒ ์ต๋๊น?
@petermax2 @mpranj ์ด ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์์ต๋๊น?
๋งํฌ์ ๋ค๋ฅธ ํํธ๋ ๋ณด์ จ๋์? ์๋ฅผ ๋ค์ด python/lua๋ฅผ ๋ค์ ์ค์นํ์๊ฒ ์ต๋๊น?
์ฃ์กํฉ๋๋ค. Python 2 ์ค์น๋ ์์คํ ๊ณผ ํจ๊ป ์ ๊ณต๋ ๊ฒ์ ๋๋ค. ๋ค์ ์ค์นํ๋ ค๋ฉด ์ ์ฒด ์ด์ ์ฒด์ ๋ฅผ ๋ค์ ์ค์นํด์ผ ํฉ๋๋ค.
Lua Elektra ํ๋ฌ๊ทธ์ธ์ ํ
์คํธํ๊ธฐ ์ํด 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
์๋ ์์คํ
(์: musl์ libc๋ก ์ฌ์ฉํ๋ openwrt)๋ ์ง์ํฉ๋๋ค.
FreeBSD btw์์๋ ๋น์ทํ ์ผ์ด ์ผ์ด๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
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 ๋๋ ํ ๋ฆฌ๊ฐ ๊ฒ์๋ฉ๋๋ค(์์๋๋ก).
man dlopen
OSX:
๊ฒฝ๋ก์ ์ฌ๋์ ๋ฌธ์๊ฐ ํฌํจ๋์ง ์์ ๊ฒฝ์ฐ(์ฆ, ๋ฆฌํ ์ด๋ฆ์ธ ๊ฒฝ์ฐ) dlopen()์ ํธํ๋๋ Mach-O ํ์ผ์ ์ฐพ์ ๋๊น์ง $LD_LIBRARY_PATH, $DYLD_LIBRARY_PATH, ํ์ฌ ์์ ๋๋ ํ ๋ฆฌ, $DYLD_FALLBACK_LIBRARY_PATH๋ฅผ ๊ฒ์ํฉ๋๋ค.
dlopen์ ์ฌ๊ธฐ์์ ์ ๋ ๊ฒฝ๋ก์ ํจ๊ป ์๋ํ๊ฑฐ๋ ์์์ ์ธ๊ธํ ๊ฒฝ๋ก ์ค ํ๋์ ์์ด์ผ ํฉ๋๋ค.
ํ์ง๋ง ์ ๋ ๊ฒฝ๋ก๋ ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด ์ ๋ณด๊ฐ ์ด๋ป๊ฒ ๋์์ด ๋๋์ง ๋ชจ๋ฆ
์ ๋ RPATH ๋๋ ํ๋ฌ๊ทธ์ธ์ ๋ํ ์ ๋ ๊ฒฝ๋ก? CMake๋ ๋น๋ ํธ๋ฆฌ RPATH๋ฅผ ์ง์ํ๋ค๊ณ ์ฃผ์ฅํ๋ฏ๋ก ํ์ํ ๊ฒฝ์ฐ ์ ๋ RPATH๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
ํ๋ฌ๊ทธ์ธ์ ๋ํ ์ ๋ ๊ฒฝ๋ก๋ ๋ง์ ์ฌ๋๋ค์ด ํ๋ ์ผ์ด๋ฉฐ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์์ง๋ง ๋น๋ ๋ด ํ ์คํธ ์ฌ๋ก์ ์ด๋ป๊ฒ ๋์์ด ๋์ง ์์์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋จผ์ ์ฌ๊ธฐ์ ์ค์ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ํฅ๋ฏธ๋ก์ธ ๊ฒ์
๋๋ค. ์ค์น๋ ๋ฒ์ ์ด ์ ๋ง ์๋ฒฝํ๊ฒ ์๋ํฉ๋๊น? ์๋ฅผ ๋ค์ด kdb run_all
๋ ํฅ๋ฏธ๋ก์ธ ๊ฒ์
๋๋ค(์ด๋ฏธ ์์์ ์ด ๋ด์ฉ ์์ ์์).
dlopen ๋งจํ์ด์ง์ ๋ถ์ฌ๋ฃ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ๋ช
ํํ๊ฒ ๋์ ์์ต๋๋ค.
dlopen(libelektra-resolver.so)์ ๊ฒ์ ๊ฒฝ๋ก๋ ํ๋ซํผ๋ง๋ค ๋ค๋ฆ
๋๋ค. dlopen์ด libelektra-kdb.so์ DT_RPATH๋ฅผ ์กด์คํ๊ธฐ ๋๋ฌธ์ Linux๊ฐ ์๋ํฉ๋๋ค.
LD_LIBRARY_PATH
๋ฅผ ์ค์ ํ๋ ๊ฒ๋ ๋ฐธ๋ธ๊ฐ ํ๋ ์ผ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
https://github.com/ValveSoftware/steam-runtime/blob/master/runtime/run.sh
๋ฌธ์ ๋ ๊ทธ๋ค์ด ๋ฌธ์๋ฅผ ์์ฑํ์ง ์๋๋ค๋ ๊ฒ์
๋๊น? @rpath
๋ ์ธ๊ธ์กฐ์ฐจ ๋์ง ์์ต๋๋ค.
BUILD_SHARED๋ฅผ ์ค์น/์ฌ์ฉํ ๋ ์ค์ ๋ก ์๋ํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ๋ชจ๋ฅผ ๋๊น์ง ๋ ์ด์ ์ถ์ธกํด์๋ ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
@markus2330
ํธ์ง: BUILD_STATIC ๋ฐ BUILD_FULL ๋นํ์ฑํ:
testkdb* ํ
์คํธ๊ฐ ์ ์คํ๋ฉ๋๋ค.
๋ฌธ์์ ๋ํด์๋ ์ฌ๊ธฐ์์ @rpath
๋ฅผ ์ธ๊ธ ํฉ๋๋ค .
๊ฐ๋จํ ์๋ฅผ ๋ค์ด ๋ด ์ง์ ์ ํ์ธํ์ต๋๋ค.
runtimelib
...๋ช ๊ฐ์ง ์์์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ. (elektra-resolver์ ๊ฐ์)lib
... dlopen
์ฌ์ฉํ์ฌ ๋ฐํ์์ runtimelib
๋ฅผ ๋ก๋ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. runtimelib
๋๋ ํ ๋ฆฌ๋ก ์ค์ ๋ DT_RPATH๊ฐ ์์ต๋๋ค. (์: ๋ฐ์ธ๋ฉ์ kdb.so)runner
... ๋ฐํ์์ dlopen
์ฌ์ฉํ์ฌ lib
๋ฅผ ๋ก๋ํ๋ ์คํ ํ์ผ(์: lua/python)https://gist.github.com/manuelm/43a4fa9dd424b4dcf03bd1d773a0e122 ์ฐธ์กฐ
์ด ์๋๋ฆฌ์ค๋ Linux์์ ์๋ํ์ง๋ง FreeBSD์์๋ ์คํจํฉ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค์ ๋ RPATH๊ฐ ์ด์ ๊ฐ๋ฅํ์ง ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค(musl์์๋ ์๋ํ์ง ์์). ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ Mac OS X์์ ์๋ํ๋ ๊ฒ ๊ฐ์์ต๋๋ค( @mpranj ๋ testkdb* ํ
์คํธ๊ฐ ์ ์๋ ํ๋ค๊ณ ๋ณด๊ณ ํ๊ณ kdb
์ด Mac OS X์์ ์๋ ํ๋ค๊ณ ๋ณด๊ณ ํ์ต๋๋ค). ๋ฐ๋ผ์ ํ์ด์ฌ/๋ฃจ์ ํ
์คํธ๋ง ์คํจํ๋ ์ด์ ๋ฅผ ์กฐ์ฌํด ๋ฌ๋ผ๊ณ ์์ฒญํ์ต๋๋ค.
Elektra๋ฅผ ์ค์นํ๋ ์ด์ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ TARGET_PLUGIN_FOLDER
์ค์ ํ์ง ์๊ณ ํ
์คํธ๋ฅผ ์ํด (์ ์๋ ๋๋ก) LD_LIBRARY_PATH
์ฌ์ฉํ ์ ์์ต๋๋ค. (run_memcheck ๋ฐ run_all ๋ด์์๋ง ์ค์ ํ๋ฉด ๋ฉ๋๋ค.)
@mpranj ๋ ๋ํ testkdb* ํ ์คํธ๊ฐ ์ ์๋ํ๊ณ @omnidan ์ด kdb๊ฐ Mac OS X์์ ์๋
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๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค.
"Don't grep output, that is short, or grep ์๋ฌธ์ rpath"๋ฅผ ์๋ฏธํฉ๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ ์๋ ๊น์? ๋ํ ํฐ๋ฏธ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ ์ ๊ณต ๊ฒ์์ ํตํด otool -l lib/libelektra-core.0.8.16.dylib
์ ์ถ๋ ฅ์์ RPATH
๋ฅผ ๊ฒ์ํ์ต๋๋ค. ์ด๊ฒ์ ๋ํ 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 ์ํค ์ ๋ฐ๋ฅด๋ฉด otool -l <file> | grep LC_RPATH -A2
๋ช
๋ น์ ์ผ๋ถ ํ์ผ์ RPATH๋ฅผ ํ์ํ๋ ํ ๊ฐ์ง ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์
๋๋ค. ๋๋ ๋ด๊ฐ ์ฌ์ฉํ ๋ ๋ฉ์ง ๋ฒ์ ์ธ otool -l lib/libelektra-core.0.8.16.dylib | grep RPATH
๋ ์ด๋ ์ ๋ ๊ด์ฐฎ์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์๋ค์ ์ ์ด๊ฑธ ์์ ํ์ธํ์ง?
@sanssecours ์ฃ์กํฉ๋๋ค ์ ๊ฐ
๋๋ ์์กด์ฑ์ ๋ณด์ฌ์ฃผ๊ณ @rpath
๋ง ํ์ํ๋ otool -L
์ ์ธ๊ธํ๊ณ ์์์ต๋๋ค. ํ์ง๋ง ๋ค ๋ง์ต๋๋ค. otool -l
๋ ์ฌ๋ฐ๋ฅธ ๋ช
๋ น์
๋๋ค.
Btw ๋ด ์์คํ ์์ elektra๋ฅผ ์ ์ธํ๊ณ RPATH๋ฅผ ์ฌ์ฉํ๋ ๋จ์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์ง ๋ชปํ์ต๋๋ค.
/usr/local/lib/libelektra.0.8.13.dylib
cmd LC_RPATH
cmdsize 40
path /usr/local/lib/elektra (offset 12)
@manuelm์ด ๋งํ๋ฏ์ด ์ด๋ฌํ ๊ฒ์ฌ๋ ๋ค์ ๋ฌด์๋ฏธํ ์ ์์ต๋๋ค...
๋๋ ์ฐ๋ฆฌ๊ฐ ์์ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ์์ ํ ์ดํดํ๋ค๊ณ ์๊ฐํ์ง ์์ง๋ง ์ฐ๋ฆฌ๊ฐ ์ํํ๋ ์๊ฒฉ ๋๋ฒ๊น ์ด ํจ์จ์ ์ด์ง ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๋๊ตฐ๊ฐ๋ non-glibc ์์คํ ์ ์ง์ํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์กฐ์ฌํ๊ณ ๋ฌธ์ํํด์ผ ํฉ๋๋ค. ํ์์์ ์ด๋ป๊ฒ ์งํํด์ผ ํ๋์ง ๋ ผ์ํฉ์๋ค.
@markus2330 ๋ฌธ์ ๋ฅผ ์ถฉ๋ถํ ์ดํดํฉ๋๋ค. ํ ์คํธ๊ฐ ์์๋๊ธฐ ์ ์ LD_LIBRARY_PATH๋ฅผ ์ค์ ํ๋ฉด ๋ฌธ์ ๊ฐ ์ฌ๋ผ์ง๋๋ค.
์ธ๊ธ๋ ๋ค๋ฅธ ๋ชจ๋ ๋ฌธ์ ๋ ์ฒญ์ด์ด๊ฑฐ๋ ์๋ชป๋ ๊ฒ์ ๋๋ค.
@manuelm ๋๋ ์น์ ํ๊ณ ์ถ์๊ณ "์ฐ๋ฆฌ"๋ผ๊ณ ๋งํ๋ค. ๋ถ๋ช ํ LD_LIBRARY_PATH๋ ๋น๋ ๋๋ ํ ๋ฆฌ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์ง ๋ชปํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ RPATH๊ฐ ๋ฐ์ด๋๋ฆฌ์ ์ค์ ๋์ด์ผ ํ๋ค๋ ์ด๋ก ์ด ๋ง๋ค๋ฉด ์ค์น๋ ๋ฒ์ ๋ ์์๋ ์ ์์ผ๋ฉฐ ์ด๋ ํ์ฌ ์ค์ ๋ก ํ์ธ๋์ง ์์์ต๋๋ค. ์ด๊ฒ์ ์กฐ์ฌ๋์ด์ผ ํฉ๋๋ค.
๋ด ์ด๋ก ์ ๋ ์ด์ ์ด๋ก ์ด ์๋๋๋ค. ์ฆ๋ช ์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ค์ ํ ๋ฒ: Linux์์๋ ๋ฐ์ธ๋ฉ์ ๊ตฌํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(lua/python์ ๊ฒฝ์ฐ kdb.so
๋ฐ glib์ ๊ฒฝ์ฐ libgelektra-4.0.so
)์ DT_RPATH
๊ฐ _AND_ dlopen
์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ธ๋ฉ์ด ์๋ํฉ๋๋ค libgelektra-4.0.so
์ด๊ฒ์ ์กด๊ฒฝํฉ๋๋ค.
๋ฌผ๋ก ๋ฐ์ธ๋ฉ์ elektra๊ฐ ์ ์ญ ์์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฒฝ๋ก์ ์ค์น๋ ํ์ ์๋ํฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ๊ฐ์๊ธฐ ์๋์ ๋ฉ์ถ์ด์ผ ํ ์ด์ ๋ฅผ ์ ํ ์์ง ๋ชปํฉ๋๋ค.
๋ฐ์ธ๋ฉ ํ ์คํธ๋ !=linux์์ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ ๋ค์ผ.
์ถ์ : GI ๋ฐ์ธ๋ฉ ํ ์คํธ์ LD_LIBRARY_PATH๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ GI ์ฌ๋ก๋ฅผ ํตํฉ/์ถ๊ฐํ๋ ์ผ์ข ์ ๋น๋ ์์คํ ๋งคํฌ๋ก๋ฅผ ์ถ๊ฐํ๊ธฐ๋ฅผ ์ํ์ต๋๋ค.
๋ฐ์ธ๋ฉ ํ ์คํธ๊ฐ LD_LIBRARY_PATH๊ฐ ํ์ํ ์ ์ผํ ๊ณณ์ธ ๊ฒ ๊ฐ์์ ๊ฑฐ๊ธฐ์ ์ถ๊ฐํ์ต๋๋ค.
@mpranj ์๋ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ ํธ๋๋น์ค๋ฅผ ๊ณง ์ป์ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@markus2330 ์๋์ ์๋ํ์ง ์์ต๋๋ค. (travis๋ ๋ด ์ปดํจํฐ๋ ์๋)
@mpranj ํ ์คํธ
@markus2330 ์ ํ์ฌ travis์์ ํ ์คํธ ์ค์ด์ง๋ง ๋๋ถ๋ถ ๋ด ์ปดํจํฐ์์์ ๋์ผํ ๋์์ ํฉ๋๋ค. da243f9e25d8fa14f8286c48b4338a73c1e7242d๋ ์๋ฌด๋ฐ ์ฐจ์ด๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
https://travis-ci.org/mpranj/libelektra์์ ๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ btw @manuelm ์ travis+OS X๋ก ๊ฑฐ์ ์๋ฃ๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ
์คํธ๋ ์คํจํ์ง๋ง travis๋ ์ค์ ๋ก ๊ฑฐ์ ์์ ํ ์ค์ ๋์์ต๋๋ค.
์, ๊ทธ๋ ๋งํ์ต๋๋ค. ์ฃผ๋ก ํ๋์ travis ํ์ผ๋ก Mac OS X ๋ฐ ๊ธฐํ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ๋งคํธ๋ฆญ์ค ์ค์ ์ด ๋๋ฝ๋์์ต๋๋ค.
๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ด์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ด์ผ ํฉ๋๋ค.