2017-01-02 2 views
0

나는 이미지에서 일부 심볼을 ​​빼내고 다른 이미지에서 심볼을 사용 (연결)하려고합니다.GCC는 다른 이미지로 심볼 목록과 링크를 추출합니다.

armccc/armlink에서 --symdefs =를 지정하면 기호와 해당 주소가 포함 된 파일이 만들어집니다.
반면에 사용되지 않는 기호를 제거하면 기존 기호가 업데이트됩니다. 그리고이 파일을 편집에 포함하면 이전 이미지의 심볼을 새 이미지로 연결합니다.

하지만 GNU toolchaing (arm-none-eabi-)에 대한 비슷한 접근법을 찾을 수 없습니다. arm-none-eabi-nm을 사용하면 armcc --symdefs 옵션과 같은 심볼 목록이 생성되지만이 심볼 목록을 두 번째 이미지 complication과 함께 사용하는 방법을 찾을 수 없습니다. (또한 grep없이 기호를 필터링하는 방법은 없습니다).

다른 옵션도 arm-none-eabi-objcopy를 사용하고있는 것처럼 보이지만 두 번째 이미지 컴플라이언스에도 사용하는 방법을 찾을 수 없습니다.

GNU 툴체인에서 어떻게 할 수 있습니까? 어떤 생각?

반면에 Keil uVision IDE에 가능하면 적용 해보고 싶습니다. 감사합니다. .

답변

1

armcc에 대해 잘 모르는 경우 표준 GNU 도구로이 동작을 에뮬레이트하는 것이 매우 쉽습니다. 예 : symdef의 파일 생성 :

$ cat tmp.c 
int foo() { return 0; } 
int bar() { return 1; } 
int main() { return 0; } 
$ gcc tmp.c 
$ readelf -sW a.out | grep GLOBAL | awk '{print $8 " " $2 }' | grep -v '^_' > symdef.lst 

을 그리고 --defsym 플래그를 통해 링커없는 문자를 정의하는 데 사용

$ LDFLAGS=$(cat symdef.lst | awk '{print "-Wl,--defsym=" $1 "=" $2}' | tr '\n' ' ') 
$ echo $LDFLAGS 
-Wl,--defsym=bar=0000000000400481 -Wl,--defsym=foo=0000000000400476 -Wl,--defsym=main=000000000040048 
+1

감사 yugr. GCC 용 링커 옵션을 찾았습니다. -Wl, - 그냥 기호 = 그것은 작동하지만 거대한 엘프 파일을 사용합니다. 나는 armcc와 같은 공유 객체와 그들의 주소를 선호한다. – muratcakmak

관련 문제