소스에서 컴파일할 때 "lib" 및 "include" 디렉터리를 언제 빌드해야 합니까?

소스에서 컴파일할 때 "lib" 및 "include" 디렉터리를 언제 빌드해야 합니까?

나는 기반 binutils을 구축하려고 노력하고 있습니다.플랫폼 A, 그것은 계속 실행될 것입니다플랫폼 A그리고 목표플랫폼 B.

binutilsin에 대한 소스 코드가 있고 /home/cedric/source/binutils-2.29/다음 2가지 빌드를 수행합니다.

cd /home/cedric/source/
mkdir default/ && cd default/
mkdir build/ install/ & cd build/
../../binutils-2.29/configure --prefix=/home/cedric/source/default/install/
make
make install

그리고

cd /home/cedric/source/
mkdir lfs/ && cd lfs/
mkdir build/ install/ & cd build/
../../binutils-2.29/configure --prefix=/home/cedric/source/lfs/install/ --target=x86_64-lfs-linux-gnu
make
make install

에는 정적 라이브러리 가 포함된 디렉토리 와 일부 헤더가 포함된 default/install디렉토리가 2개 더 있는 것으로 나타났습니다 .lfs/installlibbfdopcodesinclude

내 혼란

binutils이러한 정적 라이브러리와 헤더는 왜 설치됩니까( 이러한 도구는 이미 구축되어 있으므로 그 목적은 무엇입니까 )? 다른 플랫폼용으로 구축할 때 왜 사라지나요?ldas

내가 수행한 연구는 내 혼란을 해결하지 못했습니다.

binutils-2.29/configure --help그리고 README, binutils-2.29/, binutils-2.29/binutils/binutils-2.29/bfd/

FWIW, 구성 도움말에서 생성할 수 있는 디렉터리 및 해당 기본값과 관련된 다음을 발견했습니다.

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
              [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
              [PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]

답변1

간단히 말해서, 설치해야 할 라이브러리도 있고, 설치해야 할 헤더도 있으면 lib빌드(또는 설치)하고 싶다는 것입니다. include일반적으로 두 가지가 함께 사용됩니다(적어도 C 및 C++ 라이브러리의 경우).

귀하 의 경우, 언급한 대로 binutils라이브러리 및 관련 헤더는 입니다 libbfd. 다양한 형식의 개체 파일을 조작하기 위한 라이브러리 이자 명령에 opcode를 매핑하기 위한 라이브러리입니다. 기본 설치는 동일한 호스트 컴파일을 위한 것이지만 교차 컴파일을 위한 것은 아닙니다. 따라서 시나리오에서 다른 동작이 표시됩니다. 조건부 기본값은 다음에서 볼 수 있습니다.libopcodeslibbfdlibopcodeslibbfdbfd/acinclude.m4소스 코드에서. 모든 경우에 두 라이브러리를 모두 구축해야 합니다.

libbfdGDB를 빌드하려는 경우에만 필요합니다. 크로스 컴파일 시나리오에서 설치하려는 경우 ./configure옵션을 사용하여 이를 수행하도록 지시 할 수 있습니다 --enable-install-libbfd.설치 될 것이다적절한 호스트에서 -그리고대상별 디렉터리( libbfd호스트용으로 구축되었지만 대상별 코드를 포함함)

관련 정보