
Estou tentando construir um programa c++ usando Unix.
Eu recebi o erro
Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt
Ouvi dizer que só preciso definir a localização de libboost* em minha variável de env LD_LIBRARY_PATH e então invocar make como fiz 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?
Responder1
como faço para definir a variável env LD_LIBRARY_PATH?
Você já configurou quando fez isso:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
Mas isso não resolverá o seu problema. $LD_LIBRARY_PATH
é consultado no momento da execução, para fornecer uma lista de diretórios adicionais nos quais pesquisar bibliotecas vinculáveis dinamicamente. Ele não é consultado no momento do link (exceto talvez para localizar bibliotecas exigidas 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 do vinculador. Você já fez isso também:
-L /usr/lib64
Se ainda estiver recebendo o erro, você precisa ter certeza de que a biblioteca realmente está lá. Você tem um arquivo libboost_regex-mt.so
ou libboost_regex-mt.a
nesse (ou em algum) diretório? Observe que um arquivo como libboost_regex-mt.so.othersuffix
não conta para essa finalidade. Se você não tiver isso, provavelmente precisará instalar o pacote de desenvolvimento da sua distribuição para esta biblioteca.
Responder2
Outra maneira de adicionar permanentemente um novo caminho em LD_LIBRARY_PATH:
Edite .conf
o arquivo em /etc/ld.so.conf.d/
.
Já instalei um aplicativo e suas bibliotecas não puderam ser reconhecidas por outro aplicativo. Então adiciono o caminho, ou seja /usr/local/hdf5/lib
, para x86_64-linux-gnu.conf
o arquivo. Basta colocar a próxima linha. Salvar.
Então corrasudo ldconfig
Funcionou.
PS: SO Ubuntu 14.04
Responder3
Você pode configurá-lo em seu ~/.profile
arquivo init específico do seu shell (por exemplo, ~/.bashrc
para bash, ~/.zshenv
para zsh). Então você precisa reiniciar seu shell (e possivelmente sair e fazer login novamente, dependendo de sua escolha).
Você pode verificar suas configurações com:
env | grep '^LD_LIBRARY_PATH'
EDIT: LD_LIBRARY_PATH
é para bibliotecas compartilhadas que contêm código de máquina, cujos nomes de arquivos normalmente contêm .so
em seu nome, possivelmente seguidos de números separados por pontos para distinguir diferentes versões. É possível que LD_LIBRARY_PATH
, apesar de uma biblioteca não ser encontrada devido à incompatibilidade de 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 relacionado ao LD_LIBRARY_PATH
.
Responder4
Resolvido com:
adicionar em/etc/systemd/system/pm2-node.service
Environment=PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/app/nodejs/local/nvm/versions/node/v7.8.0/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/node/.pm2
Environment=LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2
Environment=OCI_LIB_DIR=/opt/oracle/instantclient_12_2