링커가 볼 수 있도록 현재 디렉터리의 경로를 bash에 표시하려면 어떻게 해야 합니까?

링커가 볼 수 있도록 현재 디렉터리의 경로를 bash에 표시하려면 어떻게 해야 합니까?

공유 라이브러리를 로드하려고 하는데 로더가 찾고 있는 디렉터리에 해당 .so 파일이 없어서 환경 디렉터리를 설정하려고 합니다.

$ ls # (current dir is bindir)
foo.c foo.h libfoo.so exe
$ path_to_dir=/home/user/bindir
$ $path_to_dir ./exe "bla bla"
bash: /home/user/bindir: Is a directory

이것은 사소한 것일 수 있지만 일반적으로 수정된 환경 변수를 사용하여 프로그램을 실행하지 않는데 어떻게 설정합니까?

내가 그것을 실행하려고 하면 $ export path_to_dir:

$ ./exe "bla bla"
./_exe: error while loading shared libraries: libfoo.so: cannot open shared object file: No such file or directory

그렇다면 내 디렉토리의 환경 변수를 어떻게 수정합니까?

편집: 이 튜토리얼에 따르면:유튜브 라이브러리 튜토리얼libfoo.so, 링커는 내 현재 디렉터리를 검색하지 않기 때문에 라이브러리(내 경우에는) 파일을 볼 수 없습니다 . 표준 라이브러리를 사용하면 ld다음과 같이 이해됩니다.

$ld --verbose | grep -i search_dir | awk '{print $1}' RS=';'
SEARCH_DIR("=/usr/local/lib/x86_64-linux-gnu")
SEARCH_DIR("=/lib/x86_64-linux-gnu")
SEARCH_DIR("=/usr/lib/x86_64-linux-gnu")
SEARCH_DIR("=/usr/lib/x86_64-linux-gnu64")
SEARCH_DIR("=/usr/local/lib64")
SEARCH_DIR("=/lib64")
SEARCH_DIR("=/usr/lib64")
SEARCH_DIR("=/usr/local/lib")
SEARCH_DIR("=/lib")
SEARCH_DIR("=/usr/lib")
SEARCH_DIR("=/usr/x86_64-linux-gnu/lib64")
SEARCH_DIR("=/usr/x86_64-linux-gnu/lib")

따라서 이 변수와 위 변수 사이의 목적은 as 환경 변수를 설정하여 내 디렉토리를 표시 $path_to_dir하려는 것입니다 (그것도 시도했지만 보시다시피 아무 소용이 없습니다). 그렇다면 내 라이브러리를 "보고" 위치 독립적인 프로그램(exe)과 연결하기 위해 내 디렉토리를 표시하려면 어떻게 해야 합니까 ?ld$path_to_direxportld

답변1

오타가 있는 것 같습니다.

$path_to_dir ./exe "bla bla"

이 호출에는 $path_to_dir두 개의 매개변수가 사용됩니다. 아마도 그럴 것입니다.

$path_to_dir/exe "bla bla"

이는 하나의 인수로 실행 파일을 호출합니다. 동일한 호출에서 LD_LIBRARY_PATH를 설정할 수도 있습니다.

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD $path_to_dir/exe "bla bla"

관련 정보