14

私は今日、g++-4.6を持っていたと思うUbuntu12.04からg++-4.7.2を備えたUbuntu12.10にアップグレードしました。私のコードでは、としてマークされたいくつかの関数がありました__attribute__((always_inline))。この理由は、プロファイリングによってコードのパフォーマンスが大幅に向上したことがわかったからです。g ++ 4.6では正常に機能しましたが、g++4.7では次のエラーメッセージが表示されます。

エラー:always_inlineの呼び出しでインライン化に失敗しました'void func_name(args)':関数本体はリンク時に上書きできます

実際のコードを共有することはできません。コードを絞り込もうとしましたが、変更しすぎるとエラーが消えるので、役に立ちません。このエラーメッセージの根本的な原因に興味があります。

4

2 に答える 2

19

自分で答えるつもりはなかったのですが、投稿してから数分後に誤って答えを見つけてしまいました。

この(不可解な)エラーメッセージの理由は、関数がとしてマークされておらずinline、のみとしてマークされていたため__attribute((always_inline))です。

于 2012-11-20T11:45:37.253 に答える
0

私たちにとっての問題は、関数「static」も宣言できなかったことです。「属性((always_inline))」は、プレーンテキストで「これをインライン化し、関数本体を含めない」ことを意味し、エラーメッセージは「コンパイラが関数本体を含める必要があった」ことを意味します。この場合、関数は「静的」ではなかったため、外部参照に使用できる必要がありました。

于 2019-10-09T22:06:08.740 に答える