2017-05-19 8 views
0

gccは__attribute__((weak))です。これにより、関数などの弱いシンボルを作成できます。これにより、ユーザーは関数を再定義できます。私はXC8で同じ動作をしたいと思います。XC8コンパイラは弱い記号をサポートしていますか?

さらに詳しい情報:

私はXC8用のドライバを書いていますし、私は、ユーザー定義関数に低レベルの初期化を委任したいと思います。

関数を再定義することができます:putch関数はXC8のソースファイルで実装されており、printf関数によって呼び出されます。ユーザーは自分のアプリケーション内でputchを再実装することができます。同じ名前の関数が2つありますが、エラーは発生しません。

putchのXC8のソースファイルでの実装には、「弱い実装、ユーザーの実装が必要な可能性があります」というコメントがあります。

私はXC8のユーザーガイドのプラグマを見ましたが、この質問に関連する指示はありません。

+0

マイクロチップのサポートサイトではありません。なぜあなたはそれらに尋ねないのですか? – Olaf

+0

Androidプログラミングに関する質問をした場合、あなたはGoogleのサポートサイトではないと答えていますか?私はクリフォードの答えが自分よりも他の人にとって有益かもしれないと思います。 – a44043

+0

マニュアルではこのような指令が無視されていることが明確に記載されているので、おそらく疑問は_「直接的にサポートしていないコンパイラで「弱いリンケージ」を実装するにはどうすればよいですか?」@Olafはそれほど反対するかもしれません。同じままです。 – Clifford

答えて

1

リンカは、入力オブジェクトファイルによって解決されていないシンボルを解決するために静的ライブラリのみを検索するため、静的ライブラリ関数の置き換えは弱いリンケージなしで行うことができます。弱いリンケージは、静的ライブラリではなく、ソースコードまたはオブジェクトコードとして提供されるコードに役立ちます。

弱いリンケージディレクティブがサポートされていない場合は、「弱い」シンボルの静的ライブラリを作成してリンクすることができます。

あなたは上記の提案された方法を、使用する必要がありますので、IARの互換性ディレクティブ__weakweakプラグマの両方のためのXC8 manual文書の動作は、とディレクティブが無視され、両方のケースでは、(XC16とXC32でのみサポート)どのような場合でも、はるかにポータブル - 多少不便です。

putch()の場合、私はあなたが信じているようにはうまくいかないと思っています。私はこれが弱いリンケージの問題ではないと思います。 printf()を含む静的ライブラリには、putch()への未解決のリンクが存在し、リンカはそれをあなたが提供するもので解決します。コンパイルしてマイクロチップの実装とソースコードの両方をソースコードからリンクすると、リンカエラーが発生します。同じように、リンカエラーが発生するような実装を何も提供しない場合は、

+0

ありがとうございました! – a44043

関連する問題