2017-11-09 27 views
2

두 빌드 환경 (buildroot 및 Yocto)에서 동일한 라이브러리 (TI GBM)를 빌드하고 있습니다. Yocto의 바이너리는 작동하지만 세그멘테이션 오류로 인해 buildroot의 바이너리가 실패합니다. 두 빌드 시스템에서 autoconfig로 생성 된 메이크 파일을 비교하고 LDFLAGS의 차이점을 확인했습니다.빌드 환경에서 자동 구성 빌드에 새 LDFLAGS를 도입하는 방법

경우 yocto :

LDFLAGS = -L/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib -Wl,-rpath-link,/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib -Wl,-O1 -Wl,--hash-style=gnu 

Buildroot :

LDFLAGS = 

방법 경우 yocto이 메이크에 새로운 링커 지시문을 추가?

답변

1

Yocto는 어떻게 이러한 새로운 링커 지시문을 makefile에 추가합니까?

Yocto는 아무 것도하지 않고 있습니다. Yocto는 작업을 수행하는 configure 스크립트입니다. 그 전체 목적은 필요한 도구를 식별하고, 적절한 플래그를 찾아 내며, 다양한 시스템 기능의 유무를 결정하기 위해 실행되는 시스템을 분석하는 것입니다. 이렇게하면 (일반적으로) 프로그램 소스에 포함 된 템플릿을 채워서 하나 이상의 Makefile을 만듭니다. 값을 채우는 것 중 하나는 LDFLAGS 변수의 값입니다.

어떻게 configure 플래그가 선택되는지는 부분적으로 어떻게 쓰여지는가에 따라 부분적으로 어떻게 실행되는지에 달려 있습니다.configure 명령 줄 또는 환경을 통해 일부 변수를 지정할 수 있으며 명령 줄 옵션을 통해 다른 변수에 영향을 줄 수 있습니다. 이들 중 일부는 계단식 효과를 가질 수 있습니다. 예를 들어 yocto 환경에서 LDFLAGS을 선택하면 C 또는 C++ 컴파일러와 관련이있을 가능성이 큽니다.

0

스크립트가 실행되면 환경의 특정 변수 값을 Makefile에 저장합니다. LDFLAGS은 "precious variables"이라는 변수 중 하나입니다.

1

이러한 새로운 링커 지시문을 빌드에 도입하기 위해 Yocto가 수행하는 작업은 무엇입니까? 당신이 gcc 및 기타 명령 줄 컴파일러 프론트 엔드에 익숙하다면

LDFLAGS는 make 내부 (여기서는 C++를 가정하면) 이런 식으로 gcc를 호출, 링커 옵션입니다 : 다음은

g++ CPPFLAGS CXXFLAGS SOURCE_CODE LDFLAGS LDADD 

그것은 LDFLAGS와 같을 것이다 방법의 예는 Yocto에 표시된 : 값의 어떤 의미에 관해서는

g++ -Wall -g -O3 -o output myfiles... -L/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib -Wl,-rpath-link,/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib -Wl,-O1 -Wl,--hash-style=gnu 

LDFLAGS

-L/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib -Wl,-rpath-link,/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib -Wl,-O1 -Wl,--hash-style=gnu` 

그것은 의미 : 디렉토리에

  • 검색 라이브러리 :

    /home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib

  • 동적 경로에 라이브러리를 링크 : /home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib