Libelektra: OS X์—์„œ ์ผ๋ถ€ ํ…Œ์ŠคํŠธ ์‹คํŒจ

์— ๋งŒ๋“  2016๋…„ 04์›” 26์ผ  ยท  57์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ElektraInitiative/libelektra

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 ๋ฐ˜ํ™˜ ๊ฐ’๊ณผ ํ•จ๊ป˜ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜์‹œ๋ฉด ์•„๋ž˜์— ๋Œ“๊ธ€์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

๋ชจ๋“  57 ๋Œ“๊ธ€

์ฃ„์†กํ•˜์ง€๋งŒ ์ €๋Š” 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 ๋ฐ ๊ธฐํƒ€๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๋งคํŠธ๋ฆญ์Šค ์„ค์ •์ด ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰