Pergunta

Estou tentando compilar um programa executado em um servidor HP UX em um Red Hat Linux.

Ele usa biblioteca xerces-c para analisar arquivos XML. Compilação é ok, mas quando eu tentar executá-lo, eu recebo a seguinte mensagem

./ a.out: erro ao carregar compartilhada Bibliotecas: libxerces-c.so.28: não pode abrir arquivo objeto compartilhado: Nenhum tal lima ou diretório

Eu escrevi um programa muito simples para tentar entender o que está acontecendo:

#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/TransService.hpp>
#include <xercesc/parsers/SAXParser.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>



int main(int argc, char* argv[])
{
        return 0;
}

E compilado-lo assim:

g ++ test.cpp -L./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include

Surpreendentemente o arquivo está realmente lá:

lib]$ ls
libxerces-c.a   libxerces-c.so.28    libxerces-depdom.a   libxerces-depdom.so.28
libxerces-c.so  libxerces-c.so.28.0  libxerces-depdom.so  libxerces-depdom.so.28.0

Todos os pensamentos? Eu sinto que estou faltando alguma coisa, mas não sei o quê.

Agradecemos antecipadamente.

Foi útil?

Solução

ldd a.out correr e ver se o vinculador pode resolver o direito .so arquivo

LD_LIBRARY_PATH exportação para incluir a pasta atual (da mesma forma como a variável PATH) e verificar ldd novamente

Outras dicas

a boa maneira de fazer o que você quer é o seguinte:

g++ test.cpp -Xlinker -R ./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include

ou

g++ test.cpp -Wl,-rpath ./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include
opções

Xlinker ou Wl permitem que você use específica opções de ligação, você não precisa modifiy LD_LIBRARY_PATH

Você precisa dizer a biblioteca c runtime onde encontrar os vários símbolos que Arent compilados estaticamente no seu código e Arent nos locais normalmete / lib e / usr / lib.

Você pode fazer isso adicionando o caminho para a biblioteca compartilhada para LD_LIBRARY_PATH. Neste caso, este será o que você tem posto para o argumento -L para o compilador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top