2012-03-24 2 views
2

나는 리눅스에서 C++ 프로그램을 개발 중이다. 나는 몇 가지 물건 넣을 (LLVM의 비트 코드 파일 구체적하기를,하지만 그건 중요하지 않아) 라이브러리, 그래서 나는 다음과 같은 디렉토리 구조를 원하는 : 나는 lib 디렉토리를 어떻게 찾을 수 있습니까"내"lib 디렉토리를 찾는 방법은 무엇입니까?

/somewhere/bin/myBin 
/somewhere/lib/myLib.bc 

를? argv[0]에서 상대 부분을 계산하려했으나 /somewhere이 내 PATH에있는 경우 argv[0]myBin이 포함됩니다. 이 길을 갈 수있는 방법이 있습니까? 아니면 컴파일 시간에 설정해야합니까?

GNU autotools는 어떻게 처리합니까? --prefix 옵션을 ./configure에 제공하면 정확히 어떻게됩니까?

편집 :라이브러리은 제 경우에 오해의 소지가 있습니다. 내 라이브러리은 LLVM 비트 코드로 구성되어 있으므로 실제 (공유) 객체 파일이 아니며 프로그램에서 열고 자하는 파일입니다. 이미지 또는 텍스트 파일로 생각할 수 있습니다.

+1

라이브러리가 정적 인 경우 -L your/lib/dir을 추가하면됩니다. 동적 인 경우 LD_LIBRARY_PATH 등을 가질 수 있습니다 ... –

+0

내가 말했듯이 라이브러리는 LLVM Bitcode 파일이므로 이러한 정보는 도움이되지 않습니다. 내 프로그램에서 읽으려는 이미지 또는 텍스트 파일로 생각하면됩니다. –

답변

1

어쩌면 당신이 원하는 것은 :

/usr/lib 

유닉스 디렉토리 참조 : http://www.comptechdoc.org/os/linux/usersguide/linux_ugfilestruct.html

+0

예. 알고 있습니다. 이상적으로 나는 원하는 프로그램을 옮길 수 있기를 원한다. 그래서 바이너리가/usr/bin에 있다면/usr/lib는 괜찮다. 내 프로그램은 내 대학의 의자 개발 환경에 통합 될 것이며, 예를 들어 다른 경로를 사용합니다. 릴리스 및 디버그 바이너리. –

0

은 lib 디렉토리는 "../lib"상대는 어디에서 확인해야

먼저 실행하는 것입니다 가정 myBin이 위치하면/proc/self/exe를 읽음으로써 얻을 수 있습니다

그런 다음 "../lib"로 바이너리 파일 경로를 concat하면 lib 디렉토리 너.

+0

이 작업은 가능하지만 일반적으로 플랫폼 종속 코드는 사용하지 않습니다. –

0

컴파일러 플래그를 사용하여 프로그램에 알려야합니다. 예를 들어, 플러그인 디렉토리가있는 경우 :

# Makefile.am 
AM_CPPFLAGS = -DPLUGIN_DIR=\"${pkglibdir}\" 
bin_PROGRAMS = awesome_prog 
pkglib_LTLIBRARIES = someplugin.la 
+0

이것은 합리적인 것처럼 보입니다. 이제 나는 예제를 스콘으로 변환하는 방법을 찾아야 만합니다. –

0

파일 /etc/ld.so.conf에 저장되어 검색 할 디렉토리의 목록입니다.

Linux에서 환경 변수 LD_LIBRARY_PATH은 콜론으로 구분 된 디렉토리 세트로, 표준 디렉토리 세트보다 먼저 라이브러리를 검색해야합니다. 이는 새 라이브러리를 디버깅하거나 특수 목적을 위해 비표준 라이브러리를 사용할 때 유용합니다.

LD_LIBRARY_PATH

개발 및 테스트를위한 편리합니다 ... 문제의 부분을 해결

$ export LD_LIBRARY_PATH=/path/to/mylib.so 
$ ./myprogram 

[read more]

+0

라이브러리는 LLVM Bitcode이므로 사용할 수 없습니다. –

0

"? 어떻게 함께 autotools를 거래를 GNU하기"

을 --prefix를 configure에 할당하면 기본적으로 두 가지 일이 발생합니다 : 1) 모든 것이 $ {prefix}에 설치되도록 빌드 시스템에 지시하고, 2) $ {prefix} /share/config.site에서 방법에 대한 추가 정보 시스템이 설정됩니다 (해당 파일이 존재하지 않는 것이 일반적입니다). 라이브러리 찾기에 도움이되는 것은 절대적으로 없지만 도구 체인을 올바르게 설정 한 사용자에 달려 있습니다./foo/lib에 라이브러리를 사용하고 싶다면 툴 체인을 설정해야합니다 (예 :/foo/lib를 /etc/ld.so에 넣음).conf 또는 LDFLAGS에 -L/foo/lib를 넣고 LD_LIBRARY_PATH에 "/ foo/lib"를 넣음)

configure 스크립트는 환경을 설정하는 데 의존합니다. 이 환경을 설정하는 데 도움이되지 않지만 그렇게하지 않았 음을 알리는 데 도움이됩니다.

0

/proc/self/exe에서 readlink 시스템 호출을 사용하여 실행 파일의 경로를 얻을 수 있습니다. realpath 등을 사용할 수 있습니다.

관련 문제