Como escolher a versão do gtk para o aplicativo Eclipse RCP no linux?

1

Eu tenho um aplicativo Eclipse RCP que desejo executar em ambiente Linux que possui vários gtks instalados.

Existe uma maneira de escolher a versão do gtk contra a qual eu posso executar o aplicativo?

sabor do Linux: openSUSE
Gerenciador de janelas: iceWM
gtk + versões instaladas: 1.2.10 & 2.2.1

    
por gerin 20.02.2014 / 12:53

1 resposta

1

Isso pode ser possível. Você pode verificar as bibliotecas compartilhadas carregadas pelo seu programa com o comando ldd : por exemplo,

  # ldd /usr/sbin/openvpn
    linux-vdso.so.1 =>  (0x00007ffffb5fe000)
    liblzo2.so.2 => /lib/x86_64-linux-gnu/liblzo2.so.2 (0x00007fc3dc936000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc3dc719000)
    libpkcs11-helper.so.1 => /usr/lib/x86_64-linux-gnu/libpkcs11-helper.so.1 (0x00007fc3dc4ff000)
    libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fc3dc2a1000)
    libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fc3dbec5000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc3dbcc0000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc3db8f8000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fc3dce22000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc3db6df000)

isto mostra todas as bibliotecas invocadas por openvpn . As bibliotecas cujo nome termina em .so.N , onde N é um único dígito (qualquer dígito único) são, na verdade, links para as bibliotecas reais. Tome libz.so.1 como um exemplo:

 root@rasal:/lib/x86_64-linux-gnu# find / -type f -name 'libz.so.1*' -print
 /lib/x86_64-linux-gnu/libz.so.1.2.8
 /lib/i386-linux-gnu/libz.so.1.2.8

 root@rasal:/lib/x86_64-linux-gnu# ls /lib/x86_64-linux-gnu/libz.so.*
 /lib/x86_64-linux-gnu/libz.so.1  /lib/x86_64-linux-gnu/libz.so.1.2.8

 root@rasal:/lib/x86_64-linux-gnu# file /lib/x86_64-linux-gnu/libz.so.*
 /lib/x86_64-linux-gnu/libz.so.1:     symbolic link to 'libz.so.1.2.8'
 /lib/x86_64-linux-gnu/libz.so.1.2.8: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x42bce97e9a0f7a78fcdb3b79d11f67b02abc522c, stripped

O comando ldd mostra o que a biblioteca carregada, libz.so.1 (btw, isso é chamado de soname da biblioteca compartilhada) resolve e os comandos a seguir localizam a biblioteca e mostre que o soname é, na verdade, um link para o nome real da biblioteca compartilhada.

Você pode esperar determinar qual biblioteca compartilhada é carregada, alterando este link.

Há um certo número de ressalvas para isso, o mais importante é que, enquanto você está geralmente seguro em substituir diferentes versões menores da mesma versão principal (por exemplo, usando libz.so.1.2.8 em vez de libz .1.1.6) é bom, enquanto substituindo versões diferentes em seu número maior (o primeiro número seguinte so ) não é possível. De acordo com a página tldp.org ,

Programs, when they internally list the shared libraries they need, should only list the soname they need.

Isso implica que você não poderá substituir duas versões da mesma biblioteca compartilhada pertencentes a diferentes versões principais .

De qualquer forma, sugiro o link acima para mais esclarecimentos.

    
por 20.02.2014 / 16:48