Eu estou tentando criar um programa c ++ usando o Unix.
Eu entendi o erro
Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt
Ouvi dizer que só preciso definir o local do libboost * na minha variável LD_LIBRARY_PATH env e depois invocar o make como originalmente, digitando
-L /usr/lib64 -l boost_regex-mt
ou
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
Mas onde está LD_LIBRARY_PATH? como faço para definir a variável env LD_LIBRARY_PATH?
Respostas:
Você já o definiu quando fez isso:
Mas isso não vai resolver o seu problema.
$LD_LIBRARY_PATH
é consultado no momento da execução, para fornecer uma lista de diretórios adicionais nos quais procurar bibliotecas dinamicamente vinculáveis. Não é consultado no momento do link (exceto talvez para localizar bibliotecas necessárias pelas próprias ferramentas construídas!).Para informar ao vinculador onde encontrar bibliotecas no momento da construção, você precisa usar a
-L
opção vinculador. Você já fez isso também:Se você ainda estiver recebendo o erro, precisará verificar se a biblioteca está realmente lá. Você tem um arquivo
libboost_regex-mt.so
oulibboost_regex-mt.a
nesse diretório (ou em algum)? Observe que um arquivo comolibboost_regex-mt.so.othersuffix
não conta para esse fim. Se você não tiver isso, provavelmente precisará instalar o pacote de desenvolvimento da sua distribuição para esta biblioteca.fonte
$LD_LIBRARY_PATH
também é consultado porld
: «5. Para um vinculador nativo, pesquise o conteúdo da variável de ambiente" LD_LIBRARY_PATH ". »ld
manual refere-se apenas a dependências recursivas: bibliotecas dependentes de uma biblioteca que já foram selecionadas para serem vinculadas. Não se trata de encontrar bibliotecas para o executável que está sendo construído. Isso é o que-L
faz.apt-get
você der um comando não encontrado, não será derivado do Debian, então você precisará de outro método para instalar o pacote que está faltando. Definitivamente, esse é o seu problema.-Ldir -llib
deve funcionar como argumento parald
ou paragcc/g++/etc
incluir a fase de link, mas o Q original e restaurado mencionamake
: com um makefile normal que você provavelmente precisaLDFLAGS="whatever"
e com um makefile inteligente, você pode precisar de quase qualquer coisa, incluindo tijolos para atirar no autor inteligente do makefile.Outra maneira de adicionar permanentemente um novo caminho no LD_LIBRARY_PATH:
Edite o
.conf
arquivo em/etc/ld.so.conf.d/
.Eu já instalei um aplicativo e suas bibliotecas não puderam ser reconhecidas por outro aplicativo. Então eu adiciono o caminho, ou seja
/usr/local/hdf5/lib
, aox86_64-linux-gnu.conf
arquivo. Basta colocar na próxima linha. Salve .Então corra
sudo ldconfig
Funcionou.
PS: Sistema operacional Ubuntu 14.04
fonte
Você pode configurá-lo em seu
~/.profile
e / ou arquivo init específico do seu shell (por exemplo,~/.bashrc
para bash,~/.zshenv
para zsh). Então você precisa reiniciar o seu shell (e possivelmente sair e entrar novamente, dependendo da sua escolha).Você pode verificar suas configurações com:
EDIT:
LD_LIBRARY_PATH
é para bibliotecas compartilhadas que contêm código de máquina, cujos nomes de arquivos geralmente contêm.so
em seu nome, possivelmente seguidos por números separados por pontos para distinguir versões diferentes. É possível queLD_LIBRARY_PATH
, apesar de , uma biblioteca não tenha sido encontrada devido à incompatibilidade da ABI. Observe também que linguagens (como Perl e Python) e pacotes podem ter seu próprio sistema de bibliotecas (possivelmente também com.so
arquivos), não relacionados aLD_LIBRARY_PATH
.fonte
LD_LIBRARY_PATH
(para evitar colisões com as bibliotecas habituais). Você precisa fazer uma pergunta específica para isso, com a mensagem de erro recebida.Se o erro do caminho da sua biblioteca estiver no vinculador, durante a compilação, você precisará adicionar o caminho à biblioteca na variável $ LD_LIBRARY_PATH. Se o erro da biblioteca é quando você realmente executa o programa compilado, é necessário adicionar o caminho da biblioteca ao /etc/ld.so.conf e executar o ldconfig para reconstruir o cache do caminho de pesquisa da biblioteca.
fonte
Resolvido com:
adicionar em
/etc/systemd/system/pm2-node.service
fonte