내 응용 프로그램은 외부 정적 라이브러리에있는 일부 함수를 호출합니다. 외부 정적 라이브러리를 내 응용 프로그램에 연결하면 모든 것이 작동합니다 (이 경우 GCC를 사용하고 있습니다).외부 정적 라이브러리의 세그먼트를 특정 위치에 배치하십시오.
그럼에도 불구하고 라이브러리의 텍스트, .data 및 .bss 섹션의 위치 (주소)는 링커에서 선택합니다. 링커 스크립트를 수정하여 위치를 선택/변경할 수 있지만 라이브러리의 모든 함수, 변수 등을 지정해야하므로 지루합니다. 또 다른 솔루션은 전체 부분을 다시 위치하여 링커를 수정 한 후 각 기능/변수의 섹션 속성을 배치하고,하여 외부 라이브러리를 구축하는 것입니다
. = 0x1000; /* new location */
KEEP(*(.text.library_function1));
KEEP(*(.text.library_function2));
[...]
: 내 말은 무엇과 같은 뭔가. 같은 뭔가 :
/* C source file */
unsigned char __attribute__((section (".myLibrarySection"))) variable1[10];
unsigned char __attribute__((section (".myLibrarySection"))) variable2[10];
/* Linker script */
. = 0x1000;
KEEP(*(.myLibrarySection))
그러나, 나는이 트릭을 사용하지 않고 전체는 .text, .data와 외부 정적 라이브러리의 .bss라고 세그먼트를 재배치 할 수 있도록하고 싶습니다. 이 GCC 툴체인을 사용 가능
. = 0x1000;
KEEP(*(.text.library_file_name))
인가 :
나는 (링커 스크립트) 같은 것을하고 싶습니다?
다른 툴체인 (IAR, Keil 등)을 사용할 수 있습니까?