소스에서 코드를 빌드하고 경로에 추가하세요.

소스에서 코드를 빌드하고 경로에 추가하세요.

일반적으로 데비안에서는 저장소에서 항목을 설치하면 제대로 작동합니다. 일을 잘 정리하고 인생이 아름답습니다. 이는 저장소에 최신 콘텐츠를 유지하는 데 유용합니다.

일부 도구를 제작 중이며 github 또는 Mercurial에서 수동으로 업데이트하고 싶습니다.

cmake 또는 구성 스크립트를 사용하여 코드를 빌드하면 문제 없이 작동하며, 필요한 경우 패키지를 쉽게 제거하거나 업데이트할 수 있도록 고유한 접두사 경로도 추가했습니다.

방금 Mercurial에서 SDL2를 빌드하여 /opt/SDL2에 설치하고 내 경로에 추가했습니다. SDL_image를 빌드하려면 이 작업을 수행해야 합니다.

프로세스를 완료한 후 다음과 같은 결과가 나왔습니다.

Libraries have been installed in:
   /opt/SDL_IMAGE/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.

위의 출력에는 많은 내용이 나와 있으며 이를 구문 분석하는 방법을 잘 모르겠습니다. 과거에는 Mac을 사용하면 작업이 더 쉬워졌지만 Linux에는 약간의 문제가 있습니다.

위의 코드를 읽으면서 bashrc 파일에 이와 같은 내용을 추가해야 한다는 것을 깨달았습니다.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/SDL_IMAGE/lib
export LD_RUN_PATH=$LD_RUN_PATH:/opt/SDL_IMAGE/lib

sdl 이미지 헤더에 링크하면 찾을 수 있도록 bashrc에 추가합니까? ld에 대한 매뉴얼 페이지를 살펴봤지만 솔직히 이해가 되지 않아서 물어봅니다.

특히 다음 줄은: `-Wl,-rpath -Wl,LIBDIR' 링커 플래그를 사용하세요.

답변1

Mac OS X의 Xcode 및 Fink|Homebrew|MacPorts는 이러한 복잡성을 가지고 있습니다(대부분 사용자에게 숨길 뿐입니다). 이 문제에는 컴파일과 실행이라는 두 가지 측면이 있습니다. 컴파일하려면 사용자 정의 경로에 설치된 모든 라이브러리에 대한 다양한 세부 정보가 필요합니다. 일부 라이브러리에 대한 이 정보는 pkg-config홈 디렉토리에 유지 관리하는 작은 소프트웨어 라이브러리와 같은 에서 제공할 수 있습니다 .

$ ls ~/usr/rhel6-x86_64/lib/pkgconfig/
goptfoo.pc  jkiss.pc  libsodium.pc
$ echo $PKG_CONFIG_PATH
/homes/jdoe/usr/rhel6-x86_64/lib/pkgconfig
$ pkg-config --libs --cflags libsodium
-I/homes/jdoe/usr/rhel6-x86_64/include  -L/homes/jdoe/usr/rhel6-x86_64/lib -lsodium  
$ 

이러한 매직 문자열은 사용자 정의 설치 트리의 라이브러리에 대해 구축된 모든 소프트웨어의 컴파일 프로세스에 입력되어야 합니다. 세부 사항 Makefile은 여부 등에 따라 autotools달라 집니다. cmake간단한 방법은 출력을 CFLAGS포함하도록 설정 pkg-config하거나 빌드 라인에 출력을 포함하는 것입니다.

mkpwhash: mkpwhash.c
        gcc -std=gnu99 `pkg-config --cflags --libs libsodium` -lcrypt -Werror -Wall -Wextra -Wundef -ftrapv -fstack-protector-all -pedantic -pipe -o mkpwhash mkpwhash.c

autotools또는 의 경우 가방에 있는 기존 구성을 조사하는 등 cmake특정 양파를 벨트에 부착하는 방법을 더 자세히 조사해야 합니다.configure.acautotools

사용자 정의 경로에서 공유 라이브러리를 사용하도록 컴파일된 프로그램을 실행하려면 다음을 LD_LIBRARY_PATH설정(또는 시스템 전체에서 바이올린을 사용 ld.so.conf)하는 것으로 충분할 수 있습니다.

$ unset LD_LIBRARY_PATH
$ ldd ~/usr/rhel6-x86_64/bin/mkpwhash | grep sodium
        libsodium.so.13 => not found
$ exec $SHELL
$ echo $LD_LIBRARY_PATH 
/homes/jdoe/usr/rhel6-x86_64/lib
$ ldd ~/usr/rhel6-x86_64/bin/mkpwhash | grep sodium
        libsodium.so.13 => /homes/jdoe/usr/rhel6-x86_64/lib/libsodium.so.13 (0x00007e5c12ca7000)
$

(이것은 유닉스입니다. 각질을 제거하는 방법에는 여러 가지가 있습니다.그루니 소, 따라서 빌드 프로세스 출력에서 ​​"적어도 하나..." 제안이 표시됩니다. 보다 정교한 소프트웨어 라이브러리를 사용할 수 있습니다.stow또는 자신에게 얼마나 많은 로프(그리고 그에 따른 두통)를 주고 싶은지에 따라 비슷합니다. )

관련 정보