Libelektra: Alguns testes falham no OS X

Criado em 26 abr. 2016  ·  57Comentários  ·  Fonte: ElektraInitiative/libelektra

Parece que test_kdb.lua falha no OS X:

        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

Se eu executar lua ../src/bindings/swig/lua/tests/test_kdb.lua , o script apenas sairá com o valor de retorno 0 . Se você precisar de alguma informação adicional, por favor, comente abaixo.

bug

Todos 57 comentários

Sinto muito, mas não tenho o OS X. No entanto, ctest -V é seu amigo.

btw chamar lua $file não é o mesmo que executar os testes. Você está usando a biblioteca kdb instalada pelo sistema enquanto os testes obviamente usam a biblioteca localizada no diretório de compilação. Você deve definir pelo menos LUA_CPATH . consulte https://github.com/ElektraInitiative/libelektra/blob/master/src/bindings/swig/lua/tests/CMakeLists.txt#L12

90% das falhas relacionadas ao swig foram relacionadas a falhas no ambiente de construção. Portanto, primeiro tente regenerar (!) + Recompilar as ligações do swig.

Esse problema pode estar relacionado ao ad537b3 (pelo menos no Linux kdb * lua | python estavam travando, mas a correção para Linux faz parte do ad537b3). Sem a saída do teste, não se pode realmente dizer.

Você pode usar make run_all que suprime a saída de casos de teste bem-sucedidos, mas mostra a saída para os que falharam.

@sanssecours Alguma atualização sobre isso?

Esse problema pode estar relacionado ao ad537b3 (pelo menos no Linux kdb * lua | python estavam travando, mas a correção para Linux faz parte do ad537b3). Sem a saída do teste, não se pode realmente dizer.

@sanssecours Alguma atualização sobre isso?

Desculpe pela resposta tardia. Achei que já tivesse escrito um comentário contendo informações estendidas sobre esse assunto. Deixe-me começar dizendo que testpy2_kdb.py também falha em minha máquina. Portanto, pode ser um problema com minha configuração específica. Eu instalei o SWIG via Homebrew e atualmente uso o seguinte comando cmake para gerar os arquivos de compilação para Elektra:

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

Aqui está o resultado de 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

Parece que Lua não conseguiu encontrar libelektra-resolver.so , que está localizado em build/lib e /usr/local/lib/elektra na minha máquina. Preciso definir algum caminho de biblioteca para que isso funcione? A propósito, parece que testpy2_kdb.py também falha devido ao mesmo problema.

As ligações não carregam nenhuma biblioteca elektra em tempo de execução. Eles são apenas ligações. Você pode ver isso observando a localização exata do erro, que é ../src/libs/loader/dl.c:82 .

Portanto, este é um problema com o seu ambiente, um problema geral de elektra no OSX ou um problema de construção do sistema no OSX. Eu suspeito do primeiro. ping @ markus2330

dlopen(libelektra-resolver.so, 2): image not found realmente parece que não tem nada a ver com lua.

libelektra-resolver.so deve ser um link simbólico para o resolvedor que você selecionou com KDB_DEFAULT_RESOLVER , talvez sua configuração / instalação esteja corrompida? Você pode verificar se os links simbólicos estão corretos?

O estranho é: libelektra-resolver.so é usado em todos os casos de teste relacionados ao kdb, por que apenas _não_ está funcionando neste caso de teste? Talvez este caso de teste (e o do python) use a biblioteca instalada e não a biblioteca no diretório de construção. Você pode verificar com strace qual libelektra-resolver.so o caso de teste tenta carregar?

image not found é bastante genérico, pode ser que dentro da biblioteca a imagem para a sua arquitetura não seja encontrada? Você usa binários de gordura ?

libelektra-resolver.so deve ser um link simbólico para o resolvedor que você selecionou com KDB_DEFAULT_RESOLVER , talvez sua configuração / instalação esteja quebrada?

Existe uma maneira fácil de verificar se a instalação local da Elektra está quebrada? O comando kdb parece funcionar.

Você pode verificar se os links simbólicos estão corretos?

Ambos os libelektra-resolver.so aliases são vinculados a um arquivo libelektra-resolver_fm_hpu_b.so localizado no mesmo diretório dos apelidos. Portanto, parece que eles estão corretos.

Você pode verificar com strace qual libelektra-resolver.so o caso de teste tenta carregar?

Tentei sudo dtruss ctest -V -R test_kdb.lua . Aqui está o resultado:
test_kdb.lua - dtruss Output.txt . Parece que o teste usa a versão Elektra no diretório de construção. Desinstalei o Elektra por meio de sudo ninja uninstall . Em seguida, executei o teste novamente. A saída ainda é a mesma.

Você usa binários de gordura?

Não que eu saiba.

Você usa OSX El Capitan? Pode ser um problema estranho de proteção de integridade do sistema .

É meio estranho que kdb funcione.

Se tiver a ver com uma Proteção de Integridade do Sistema por causa da instalação do python / lua, pode fazer sentido.

Você usa OSX El Capitan? Pode ser um problema estranho de proteção de integridade do sistema.

Sim, eu uso o OS X 10.11.4. Desativei o SIP temporariamente e executei o teste novamente. Ainda é o mesmo problema. Embora, depois de desabilitar o SIP, encontrei um novo teste que falhou: testscr_check_kdb_internal_suite . E agora testscr_check_merge também não funciona mais 😢.

Voltei para 0.8.16, limpei meu diretório de compilação e executei ninja test novamente. Tanto testscr_check_kdb_internal_suite quanto testscr_check_merge ainda falham, embora eu me lembre de que pelo menos testscr_check_kdb_internal_suite funcionava quando Elektra 0.8.16 foi lançado. Aqui está o resultado do teste adicional que também falhou agora:
testscr_check_kdb_internal_suite.txt
testscr_check_merge.txt

Eu mudei o título e me removi. Não tenho acesso direto a uma máquina OSX e carece de conhecimento aprofundado. Sem uma máquina para vasculhar, não posso dizer nada a partir da saída de texto.

Você também olhou para as outras dicas dos links? Por exemplo, reinstalando python / lua?

@ petermax2 @mpranj Você pode reproduzir esses problemas?

Você também olhou para as outras dicas dos links? Por exemplo, reinstalando python / lua?

Desculpe, na verdade não. A instalação do Python 2 é a mesma que acompanha o sistema. Para reinstalá-lo, eu teria que reinstalar todo o sistema operacional.

Instalei o Lua apenas para testar o plugin Lua Elektra. Portanto, não acho que reinstalar faça muito sentido. No entanto, como leva apenas alguns segundos, executei brew reinstall lua . Depois disso, comecei com um diretório de compilação limpo, executei os comandos de compilação e ctest -VV -R test_kdb.lua . O teste ainda mostra a mesma saída.

A propósito: os testes testscr_check_kdb_internal_suite e testscr_check_merge agora também funcionam corretamente novamente, após eu ter removido todos os arquivos de /etc/kdb .

Atualmente não tenho outra ideia. (exceto o isolamento demorado do problema: para reduzir a chamada dlopen a um exemplo mínimo onde não funcionará) Portanto, pode ser melhor esperar se alguém puder reproduzir o problema, talvez ele dê uma nova luz sobre o problema.

Posso confirmar o mesmo comportamento na minha máquina.

Solução: defina o caminho da biblioteca corretamente: por exemplo
LD_LIBRARY_PATH="/Users/mpranj/workspace/libelektra/build/lib" ctest -V -R test_kdb.lua funciona bem para mim.

dlopen nas pesquisas do OS X $LD_LIBRARY_PATH, $DYLD_LIBRARY_PATH, current working directory, $DYLD_FALLBACK_LIBRARY_PATH , acho que nessa ordem.

O PR # 710 corrige isso, mas não tenho certeza se a correção é muito limpa.

Não, a correção definitivamente não é limpa.

Pelo que me lembro, nossos testes contam com DT_RPATH sendo definido em libelektra-kdb.so . Se isso não estiver disponível no OSX, devemos definir isso em algum local de ambiente de construção global.

Edit: Mas obrigado por descobrir!

RPATH é definido para todas as bibliotecas principais, mas talvez libelektra-core deva ser suficiente: neste lugar o dlopen acontece.

image not found significa simplesmente biblioteca não encontrada? Em caso afirmativo, alguma ideia de por que RPATH funciona para todos os testes, exceto lua e python?

Apenas para sua informação: Elektra também suporta sistemas sem RPATH (por exemplo, openwrt com musl como libc) simplesmente definindo TARGET_PLUGIN_FOLDER como uma string vazia.

Parece que coisas semelhantes acontecem no 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:

Ainda não consegui verificar lua no FreeBSD.

@mpranj bom saber, então FreeBSD parece ser uma boa dica se funcionar com MacOSX também (próximo ao OpenBSD). Os outros kdb testcases e a ferramenta de linha de comando kdb funcionam?

Você pode abrir questões ou anexar questões do OpenBSD sobre os casos de teste que não funcionam no FreeBSD?

Se você quer dizer estes:

        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

... então sim. A ferramenta kdb parece funcionar (apenas uma verificação rápida com ls).

Caso contrário, muitas coisas estão falhando, mas não poderei verificar / relatar tudo hoje. Mas com certeza vou relatar tudo quando for testá-lo adequadamente.

Meu palpite é que os testes de kdb funcionam porque eles estão vinculados estaticamente, certo?
Se eu desabilitar BUILD_STATIC os testes também não funcionam.

@ markus2330 Não acho que podemos evitar definir LD_LIBRARY_PATH em algumas plataformas. Como TARGET_PLUGIN_FOLDER funcionando? Ou, mais especificamente, como isso resolve a pesquisa dinâmica na biblioteca?

Obrigado, essa é uma boa ideia: @sanssecours você pode desativar BUILD_STATIC e BUILD_FULL e executar novamente todos os testes ( testkdb )?

Se TARGET_PLUGIN_FOLDER estiver vazio, os plug-ins são instalados onde as bibliotecas estão e nenhum RPATH ou LD_LIBRARY_PATH é necessário. Mas isso só ajudaria quando o Elektra instalado fosse usado (o que pode ser o caso dos testes python / lua ).

https://cmake.org/Wiki/CMake_RPATH_handling diz ".. RPATH no Mac OS X. Será habilitado tanto para a árvore de construção quanto para a árvore de instalação", então, na verdade, também os binários da árvore de construção devem ter RPATH definido. @sanssecours Você pode verificar isso? Por exemplo, usando readelf -a lib/libelektra-core.so.0.8.16 | grep RPATH .

O problema não é sobre o RPATH em si, mas sobre dlopen no linux lendo DT_RPATH em comparação com outras plataformas.

man dlopen da glibc:

  • (ELF apenas) Se o arquivo executável do programa de chamada contiver uma marca DT_RPATH e não contiver uma marca DT_RUNPATH, os diretórios listados na marca DT_RPATH serão pesquisados.
  • Se, no momento em que o programa foi iniciado, a variável de ambiente LD_LIBRARY_PATH foi definida para conter uma lista de diretórios separados por dois pontos, então eles serão pesquisados. (Como medida de segurança, esta variável é ignorada para os programas set-user-ID e set-group-ID.)
  • (ELF apenas) Se o arquivo executável do programa de chamada contiver uma tag DT_RUNPATH, os diretórios listados nessa tag serão pesquisados.
  • O arquivo de cache /etc/ld.so.cache (mantido por ldconfig (8)) é verificado para ver se ele contém uma entrada para nome de arquivo.
  • Os diretórios / lib e / usr / lib são pesquisados ​​(nessa ordem).

man dlopen no OSX:

Quando o caminho não contém um caractere de barra (ou seja, é apenas um nome de folha), dlopen () pesquisa o seguinte até encontrar um arquivo Mach-O compatível: $ LD_LIBRARY_PATH, $ DYLD_LIBRARY_PATH, diretório de trabalho atual, $ DYLD_FALLBACK_LIBRARY_PATH.

dlopen deve funcionar com caminhos absolutos aqui, ou precisa estar em um dos caminhos mencionados acima

Mas não fazemos caminhos absolutos. Portanto, não tenho ideia de como essa informação ajuda

RPATH absoluto ou caminhos absolutos para plug-ins? CMake afirma que tem suporte para RPATH de árvore de construção, então ele deve usar um RPATH absoluto se necessário.

Caminhos absolutos para plug-ins é o que muitos fazem e seria uma mudança fácil, mas não vejo como isso não ajudaria nos casos de teste internos.

Em primeiro lugar, seria interessante qual é o problema real aqui. A versão instalada realmente funciona totalmente? Por exemplo, kdb run_all também seria interessante (próximo ao que já escrevi acima).

Minha pasta de dlopen manpages afirma claramente do que se trata.
O caminho de pesquisa de dlopen (libelektra-resolver.so) é diferente em plataformas diferentes. Linux funciona porque dlopen honra DT_RPATH do libelektra-kdb.so

Parece que definir LD_LIBRARY_PATH é o que a válvula também está fazendo.
https://github.com/ValveSoftware/steam-runtime/blob/master/runtime/run.sh

Quer dizer que o problema é que eles não escrevem documentação? @rpath nem sequer é mencionado aqui.

Acho que até que não saibamos o que realmente funciona quando instalado / com BUILD_SHARED não devemos especular mais.

@ markus2330
EDIT: desabilitando BUILD_STATIC e BUILD_FULL:
os testes testkdb * funcionam bem.

Sobre a documentação, eles mencionam @rpath aqui .

Acabei de verificar minha declaração com um pequeno exemplo:

  • runtimelib ... uma biblioteca que fornece algumas funções aleatórias. (como elektra-resolver)
  • lib ... uma biblioteca que carrega runtimelib em tempo de execução usando dlopen . Ele tem DT_RPATH definido para o diretório de runtimelib . (como kdb.so das ligações)
  • runner ... um executável que carrega lib em tempo de execução usando dlopen (como lua / python)

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

Este cenário funciona no Linux, mas falha no FreeBSD.

Eu sei que RPATH definido em uma biblioteca não é portátil (também não funcionou para musl). Mas parecia funcionar para Mac OS X ( @mpranj também relatou que os testes testkdb * funcionam bem e @omnidan relatou que kdb funciona com Mac OS X). Assim, pedi para investigar por que apenas os testes python / lua falham.

A maneira portátil de instalar o Elektra não está configurando TARGET_PLUGIN_FOLDER e para os testes poderíamos usar (como sugerido) LD_LIBRARY_PATH . (Só precisaríamos defini-lo em run_memcheck e run_all).

@mpranj também relatou que os testes testkdb * funcionam bem e @omnidan relatou que o kdb funciona com Mac OS X

testkdb* e kdb definiram DT_RPATH automaticamente. O interpretador Python e lua não. Isso é fundamentalmente diferente.

[...] e para testes poderíamos usar (como sugerido) LD_LIBRARY_PATH.

Então, por favor, adicione. Obrigado

Sim, você está certo para o sistema de construção: CMake parece definir RPATH em todos os executáveis, mas obviamente não para python / lua.

Quando instalado, no entanto, ele não seria definido. Então, por favor, alguém confirme se kdb funciona (com TARGET_PLUGIN_FOLDER definido).

@sanssecours você pode desativar BUILD_STATIC e BUILD_FULL e executar novamente todos os testes ( testkdb )?

Parece que isso não muda muito, exceto que ninja test executa menos testes (54 em vez de 114). Os testes test_kdb.lua e testpy2_kdb.py ainda falham. Todos os outros testes (parecem) funcionar.

https://cmake.org/Wiki/CMake_RPATH_handling diz ".. RPATH no Mac OS X. Será habilitado tanto para a árvore de construção quanto para a árvore de instalação", então, na verdade, também os binários da árvore de construção devem ter RPATH definido. Por exemplo, usando readelf -a lib/libelektra-core.so.0.8.16 | grep RPATH .

Usei o comando otool -l lib/libelektra-resolver.so - libelektra-core.so.0.8.16 não existe na minha máquina. De acordo com o resultado:

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

RPATH está definido.

Por exemplo, kdb run_all também seria interessante (próximo ao que já escrevi acima).

Na minha máquina, 5 de 655 testes falharam. 4 dos testes ( testmod_crypto , testmod_iterate , testmod_semlock e testmod_template ) falham devido ao mesmo erro básico:

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

O teste testmod_python2 mostra a seguinte saída de erro:

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

Abaixo está a saída de testmod_lua , que não relata erros.

--- 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).

No OS X, dylibs são criados, não .so. Definitivamente, há um libelektra-core.0.8.16.dylib ou similar.

Definitivamente, há um libelektra-core.0.8.16.dylib ou similar.

Você está certo. Parece que RPATH não está definido para libelektra-core.0.8.16.dylib , pois otool -l lib/libelektra-core.0.8.16.dylib | grep RPATH não exibe nenhuma saída.

A saída do grep é curta, ou grep rpath minúsculo

A saída do grep é curta, ou grep rpath minúsculo

Você quer dizer “Não execute grep na saída, isso é curto, ou grep rpath minúsculo”? Se sim, por que não? Também pesquisei RPATH na saída de otool -l lib/libelektra-core.0.8.16.dylib por meio da pesquisa integrada de meu aplicativo Terminal. Isso também não mostra nenhuma ocorrência de LC_RPATH .

Se eu pesquisar rpath , vejo uma ocorrência de @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
...

Pelo que eu sei, @rpath é apenas um espaço reservado para (os valores armazenados em) RPATH . Não acho que esta ocorrência de rpath nos diga se RPATH está definido ou não.

De acordo com o wiki CMake, o comando otool -l <file> | grep LC_RPATH -A2 é uma forma possível de mostrar os RPATHs de algum arquivo. Acho que a versão menos sofisticada que usei - otool -l lib/libelektra-core.0.8.16.dylib | grep RPATH - deve ser mais ou menos boa também.

Gente, por que você está verificando isso?

@sanssecours desculpe, enviei a mensagem rapidamente do meu telefone, então não vi que não fazia sentido.

Eu estava me referindo a otool -L que mostra as dependências e exibe apenas @rpath . Mas sim, você está certo otool -l é o comando certo.

Btw eu não encontrei uma única biblioteca em meu sistema que está usando RPATH, exceto elektra.

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

Como @manuelm afirma, porém, essas verificações podem ser um tanto inúteis ...

Acho que não entendemos totalmente todos os problemas acima, mas concordo que o tipo de depuração remota que estamos fazendo não é eficiente. Alguém deve investigar e documentar qual é a melhor maneira de oferecer suporte a sistemas não-glibc. Vamos discutir na reunião como proceder.

@ markus2330 Compreendo perfeitamente o problema. Defina LD_LIBRARY_PATH antes do início dos testes e eu prometo que o problema foi resolvido.

Todos os outros problemas mencionados são pistas falsas ou simplesmente erradas.

@manuelm Eu queria ser legal e disse "nós". Obviamente, o LD_LIBRARY_PATH resolveria os problemas de não encontrar bibliotecas no diretório de construção (a menos que seja redefinido em algum lugar, o que parece ser o caso pelo menos para testes de GI python / lua). Mas se sua teoria estiver correta de que RPATH deve ser definido no binário, também a versão instalada seria quebrada, o que atualmente não está realmente confirmado. Isso deve ser investigado.

Minha teoria não é mais apenas uma teoria, porque eu fiz a prova.

Mais uma vez: No Linux as ligações funcionam porque a biblioteca que as implementa ( kdb.so para lua / python e libgelektra-4.0.so para glib) tem DT_RPATH set _AND_ dlopen honra isso.

É claro que as ligações funcionarão após a instalação do elektra nos caminhos da biblioteca global do sistema. Não vejo absolutamente nenhuma razão para que isso pare de funcionar de repente.

Os testes das ligações não funcionam para! = Linux. Isso é tudo.

PS: Eu sei que os testes de ligação de GI requerem LD_LIBRARY_PATH. É por isso que eu queria que você adicionasse algum tipo de macro de sistema de construção que integre / acrescente o caso GI.

Parece que os testes de ligação são o único lugar onde o LD_LIBRARY_PATH é necessário, então eu o adicionei lá.

@mpranj Espero que em breve tenhamos um travis que possa confirmar se funciona?

@ markus2330 não, não funciona. (nem no travis nem na minha máquina)

@mpranj obrigado pelo teste. Você tem o arquivo travis pronto para testá-lo novamente sem incomodar ninguém? Ambos os casos de teste ainda falham? Eu esqueci LD_LIBRARY_PATH em algum lugar ou a abordagem simplesmente não está funcionando?

@ markus2330 sim, atualmente estou testando em travis, mas tem praticamente o mesmo comportamento que em minha máquina. Parece que da243f9e25d8fa14f8286c48b4338a73c1e7242d não fez diferença.

Você pode ver aqui: https://travis-ci.org/mpranj/libelektra
E aliás , parece que

Sim, ele disse isso. Principalmente a configuração da matriz para construir o Mac OS X e outros com um arquivo travis estava faltando.

Obrigado por toda a sua ajuda, o problema deve ser corrigido agora.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

dmoisej picture dmoisej  ·  3Comentários

markus2330 picture markus2330  ·  3Comentários

markus2330 picture markus2330  ·  3Comentários

sanssecours picture sanssecours  ·  3Comentários

mpranj picture mpranj  ·  3Comentários