OS X 10.8でXCode 4.5.1を使用してサンプルコード "SonofGrab"をコンパイルしようとしています。関数ChangeBitsのインライン化を削除インライン関数のリンクエラー
Undefined symbols for architecture x86_64:
"_ChangeBits", referenced from:
-[Controller awakeFromNib] in Controller.o
[...]
ld: symbol(s) not found for architecture x86_64
は、問題を解決しますが、なぜ:
一つの機能は、これは、このエラーメッセージにつながる
inline uint32_t ChangeBits(uint32_t currentBits, uint32_t flagsToChange, BOOL setFlags);
controller.mで、このように定義されていますリンカは元の定義でChangebitsを見つけられませんか?
同じコードサンプルでOS X 10.7でこの問題が発生したことは覚えていません。このコードを壊したclangにいくつかの変更がありましたか? – alecail
以前はGCCやLLVM-GCCを使用していた可能性があります。 LLVM-GCCは、GCCと互換性があり、すなわち同じ結果をもたらすことを意味する。今ではClangを完全に使用していますが、リンク先のLLVMドキュメントに記載されているとおりのエラーが表示されます。 – mattjgalloway
私はこの問題に遭遇し、mattjgallowayの答えがそれを解決しました。 Controller.mの71行目の "inline"の前に "static"を追加するだけで、より明確になります。 –