
Unix를 사용하여 C++ 프로그램을 작성하려고 합니다.
오류가 발생했습니다.
Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt
LD_LIBRARY_PATH 환경 변수에 libboost*의 위치를 설정한 다음 원래 했던 것처럼 다음을 입력하여 make를 호출하면 된다고 들었습니다.
-L /usr/lib64 -l boost_regex-mt
또는
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
그런데 LD_LIBRARY_PATH는 어디에 있습니까? LD_LIBRARY_PATH 환경 변수를 어떻게 설정합니까?
답변1
LD_LIBRARY_PATH 환경 변수를 어떻게 설정합니까?
이 작업을 수행할 때 이미 설정했습니다.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
그러나 그것은 당신의 문제를 해결하지 못할 것입니다. $LD_LIBRARY_PATH
동적으로 링크 가능한 라이브러리를 검색할 추가 디렉토리 목록을 제공하기 위해 실행 시 참조됩니다. 링크 타임에는 참조되지 않습니다(빌드 도구 자체에 필요한 라이브러리를 찾는 경우는 제외!).
빌드 시 라이브러리를 찾을 위치를 링커에게 알려주려면 -L
링커 옵션을 사용해야 합니다. 당신도 이미 그렇게 했습니다:
-L /usr/lib64
여전히 오류가 발생하는 경우 라이브러리가 실제로 있는지 확인해야 합니다. 파일이 libboost_regex-mt.so
있거나 libboost_regex-mt.a
해당(또는 임의) 디렉토리에 있습니까 ? 이와 같은 파일은 libboost_regex-mt.so.othersuffix
이 목적에 포함되지 않습니다. 해당 패키지가 없으면 이 라이브러리용 배포판 개발 패키지를 설치해야 할 수도 있습니다.
답변2
LD_LIBRARY_PATH에 새 경로를 영구적으로 추가하는 또 다른 방법은 다음과 같습니다.
.conf
에서 파일을 편집합니다 /etc/ld.so.conf.d/
.
응용 프로그램을 설치한 적이 있는데 다른 응용 프로그램에서 해당 라이브러리를 인식할 수 없습니다. 그런 다음 파일 /usr/local/hdf5/lib
에 경로를 추가합니다 x86_64-linux-gnu.conf
. 다음 줄을 입력하면 됩니다. 구하다.
그런 다음 실행sudo ldconfig
효과가 있었습니다.
PS: 운영체제 우분투 14.04
답변3
~/.profile
쉘의 특정 초기화 파일(예: ~/.bashrc
bash, ~/.zshenv
zsh) 에서 이를 설정할 수 있습니다 . 그런 다음 셸을 다시 시작해야 합니다(선택에 따라 로그아웃했다가 다시 로그인할 수도 있음).
다음을 통해 설정을 확인할 수 있습니다.
env | grep '^LD_LIBRARY_PATH'
편집: LD_LIBRARY_PATH
기계어 코드가 포함된 공유 라이브러리용으로, 파일 이름에는 일반적으로 .so
이름에 포함되어 있으며 다른 버전을 구별하기 위해 마침표로 구분된 숫자가 뒤에 올 수 있습니다. 그럼에도 불구하고 LD_LIBRARY_PATH
ABI 불일치로 인해 라이브러리를 찾을 수 없을 수도 있습니다 . Perl 및 Python과 같은 언어와 패키지 .so
에는 LD_LIBRARY_PATH
.
답변4
해결 방법:
에 추가하다/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