다음 명령을 사용하여 glibc를 성공적으로 크로스 컴파일했습니다.
../configure arm-none-linux-gnueabi --host=arm-none-linux-gnueabi --target=arm-linux-gnueabi --prefix=`pwd` --build=i686-pc-linux-gnu` make -j4
절차 자체는 다음과 같습니다.이 게시물이 모든 것이 작동하는 것 같았습니다... glibc에 대한 변경 사항이 반영되지 않았다는 것을 깨닫기 전까지는 말이죠.
라이브러리가 실제로 링크되고 있는지 확인하기 위한 테스트로 다음과 같이 변경했습니다. 먼저
수정 include/signal.h
하고 추가한 다음 수정한 다음 다음과 같이 함수 정의를 계속 추가했습니다. extern int my_test_fn(void);
signal/signal.c
sysdeps/posix/signal.c
int my_test_fn() {
errno=13; //EACCESS
}
내 프로그램을 컴파일하려고 하면 오류가 발생합니다.
In function `tuning_library_init': /home/guru/workspace/tuning-library/tuning_library.c:1076: undefined reference to `my_test_fn' collect2: error: ld returned 1 exit status make: *** [host] Error 1
답변1
너무 멀리 가기 전에:
이 가이드를 읽어보세요ARM 크로스 컴파일기본 원리를 이해합니다. 사용된 버전에 관계없이 사용된 단계는 항상 일반 가이드입니다. 더 심도 있는 내용을 배우려면CLFS Wiki 탐색 최신 Stable 서적 다운로드 또는 읽기. 크로스 컴파일 툴체인 구축을 마칠 때까지 이 책을 따르고, 크로스 컴파일이 필요한 모든 것을 구축하려면 이 책에서 벗어나십시오.
glibc만 크로스 컴파일하는 것이 아니라 전체 툴체인을 크로스 컴파일해야 합니다. 툴체인 구성요소는 항상 다음과 같습니다.
- 공구 상자, 어셈블러 및 링커용
- 컴파일러, 아마도걸프 협력 협의회
- AC 라이브러리, 아마도glibc또는임베디드 플랫폼용 ucLibc
- 디버거, 아마도광둥개발은행
바라보다:eLinux용 툴체인 Wiki 항목그리고GNU 툴체인의 WikiPedia 항목.
새로운 아키텍처를 목표로 삼을 때마다 특정 순서로 빌드해야 합니다. 위의 링크를 읽으면 순서를 배울 수 있지만, CLFS 책에서는 상당히 잘 작성된 설명과 그 이유를 단계별 명령과 함께 제공합니다. 커피나 Mountain Dew를 한 잔 마신 후 프로세스를 다시 시작하는 것이 좋습니다. 처음 몇 번 수행하면 며칠이 걸리기 때문입니다. 이 프로세스는 더 많이 할수록 더욱 뿌리 깊게 자리잡게 되며, 4~6시간 정도 소요됩니다.
여기서 일반적인 문제는 사람들이 실수로 호스트 헤더와 툴체인을 크로스 컴파일 헤더와 혼동한다는 것입니다. 아마도 여러분도 그랬을 것입니다. 크로스 컴파일 체인에 포함해야 하는 헤더 파일은 /home/username/usr/local/include
호스트 시스템을 오염시키지 않도록 어딘가에 저장되어야 합니다 .