2017-11-17 5 views
0

Linaro-Toolchain 7.1.1을 사용하여 ARM 용 응용 프로그램을 정적으로 크로스 컴파일하려고합니다. 마지막 엘프 파일은 두 개의 공유 객체에 의존합니다. 내 대상 시스템 (예 : libstdC++)에서 사용할 수없는 종속성이 있기 때문에 응용 프로그램을 정적으로 컴파일해야합니다. -L 및 -I 플래그는 makefile에 있으며, 모든 것이 -static 플래그없이 정상적으로 작동합니다. 그러나 내가 -static 플래그를 사용할 때, linaro-linker는 liba.so와 libb.so와 같이 거기에 있다는 것을 알고 있더라도 의존성을 찾을 수 없다고 알려줍니다. 어떤 도움이나 문학을 가리켜 주시면 고맙겠습니다. 저는 온라인에서 연구를 했더니, 저는 완전히 정적을 이해하지 못했습니다.-static을 추가하면 linaro 컴파일러에서 라이브러리를 찾을 수 없음

주셔서 감사 의견에

+1

실행 된 컴파일 및 링커 명령뿐만 아니라 리터럴 진단 텍스트도 제공하십시오. 나는 너를 도울 수 없지만 다른 사람들은 돕는다. –

+0

'.so' 버전이 아니라 정적 링크를 위해'.a' 버전의 라이브러리가 필요합니다. '.so' 버전을 가지고 있다면 왜 바이너리뿐만 아니라 대상 장치에 복사하지 않을까요? – RPGillespie

+0

당신이 무엇을 요구하고 있는지 명확하지 않습니다. 왜 당신이 당신의 라이브러리를 정적으로 링크시킬 수 없는지 궁금해하는 것 같습니다. 질문에 서식을 추가하고 시도한 것에 대한 세부 정보를 제공하는 것이 좋습니다. – Gogeta70

답변

0

덕분에 나는 내 문제를 해결하고 내가 그것을했다 이유를 이해 할 수 있었다. 사용자 RPGillespie가 언급했듯이 -static 플래그는 객체의 아카이브 된 (libx.a) 버전을 필요로하므로 linaro 툴체인의 ar-tool을 사용하여 .o 파일을 .a 파일로 컴파일해야했습니다.

또한 RPGillespie 사용자가 나를 추천했기 때문에 g ++ 명령에서 -lx 대신 -l : libx.a를 사용하여 아카이브 x를 지정해야했습니다.

또한 x.a 파일이 없으면 링커가 동적으로 링크됩니다. 내 메이크 파일에서 실행 파일은 x.a 파일을 사용할 수 있기 전에 컴파일되었습니다 (x.so 빌드에 사용 된 makefile을 수정했기 때문에).

관련 문제