나는 기반 binutils
을 구축하려고 노력하고 있습니다.플랫폼 A, 그것은 계속 실행될 것입니다플랫폼 A그리고 목표플랫폼 B.
binutils
in에 대한 소스 코드가 있고 /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/install
lib
bfd
opcodes
include
내 혼란
binutils
이러한 정적 라이브러리와 헤더는 왜 설치됩니까( 이러한 도구는 이미 구축되어 있으므로 그 목적은 무엇입니까 )? 다른 플랫폼용으로 구축할 때 왜 사라지나요?ld
as
내가 수행한 연구는 내 혼란을 해결하지 못했습니다.
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를 매핑하기 위한 라이브러리입니다. 기본 설치는 동일한 호스트 컴파일을 위한 것이지만 교차 컴파일을 위한 것은 아닙니다. 따라서 시나리오에서 다른 동작이 표시됩니다. 조건부 기본값은 다음에서 볼 수 있습니다.libopcodes
libbfd
libopcodes
libbfd
bfd/acinclude.m4
소스 코드에서. 모든 경우에 두 라이브러리를 모두 구축해야 합니다.
libbfd
GDB를 빌드하려는 경우에만 필요합니다. 크로스 컴파일 시나리오에서 설치하려는 경우 ./configure
옵션을 사용하여 이를 수행하도록 지시 할 수 있습니다 --enable-install-libbfd
.설치 될 것이다적절한 호스트에서 -그리고대상별 디렉터리( libbfd
호스트용으로 구축되었지만 대상별 코드를 포함함)