2017-05-19 19 views
0

gcc는 기능과 같은 약한 기호를 만들 수있는 __attribute__((weak))입니다. 이를 통해 사용자는 함수를 다시 정의 할 수 있습니다. 나는 XC8에서 같은 행동을하고 싶다.XC8 컴파일러는 약한 기호를 지원합니까?

상세 정보 :

내가 XC8에 대한 드라이버를 작성하고 있는데 사용자 정의 함수에 낮은 수준의 초기화를 위임하고 싶습니다.

함수를 재정의하는 것이 가능하다는 것을 알고 있습니다. putch 함수가 XC8의 소스 파일에서 구현되고 printf 함수에 의해 호출됩니다. 사용자는 응용 프로그램 내에서 putch을 다시 구현할 수 있습니다. 동일한 이름의 함수가 두 개 있지만 오류는 발생하지 않습니다.

putch의 XC8 소스 파일 구현시 "약한 구현, 사용자 구현이 필요할 수 있습니다"라는 내용의 주석이 있으므로 가능한 것이어야합니다.

XC8의 사용 설명서에서 pragma를 보았지만이 질문과 관련된 지침이 없습니다.

+0

마이크로 칩은 마이크로 칩 지원 사이트가 아닙니다. 왜 그들에게 물어 보지 그래? – Olaf

+0

Android 프로그래밍에 대해 질문하는 경우 Google 지원 사이트가 아닌 것으로 응답합니까? 나는 클 리 포드의 대답이 나 자신보다 다른 사람들에게 유익 할 것이라고 생각한다. – a44043

+0

매뉴얼에는 그러한 지시어가 무시된다는 내용이 명확하게 나와 있으므로 아마도 "직접적으로 지원하지 않는 컴파일러에서"약 연계 "를 어떻게 구현해야합니까?"_ @Olaf는 그 이하의 질문에 반대 할 수 있습니다. 동일하게 유지 될 것입니다. – Clifford

답변

1

링커는 입력 개체 파일에서 이미 확인되지 않은 기호를 해결하기 위해 정적 라이브러리 만 검색하므로 약한 연결없이 정적 라이브러리 함수를 바꿀 수 있습니다. 약한 연결은 정적 라이브러리가 아닌 소스 또는 객체 코드로 제공된 코드에 유용합니다.

약한 링크 지시어가 지원되지 않으면 "약한"기호에 대한 정적 라이브러리를 만들어 링크 할 수 있습니다.

당신은 위의 제안 방법을 사용해야합니다 있도록 IAR 호환성 지침 __weakweak 프라 그마 모두의 XC8 manual 문서의 동작은, 그리고 지침이 무시됩니다 두 경우 모두, (XC16과 XC32 만 지원) 어쨌든 휴대용이 가능합니다. 다소 불편한 점이 있습니다.

putch()의 경우 나는 이것이 당신이 믿는 것처럼 작동하지 않는다고 생각합니다. 나는 이것이 연약한 결합의 문제가 아니라는 것을 상상할 것이다. printf()을 포함하는 정적 라이브러리에 putch()에 대한 확인되지 않은 링크가 존재하며 링커는 사용자가 제공 한 내용으로이를 해결합니다. 마이크로 칩 구현과 소스 코드를 모두 컴파일하고 링크한다면 소스 코드에서 링커 오류가 발생합니다. 마찬가지로 구현을 제공하지 않으면 링커 오류가 발생합니다.

+0

대단히 감사합니다! – a44043