エラー: 静的ライブラリでコンパイルするときの未定義のシンボル
XCode で C コードをコンパイルすると、「未定義のシンボルが含まれています」というエラー メッセージが表示される場合があります。アーキテクチャ i386。」このエラーは通常、コード内の未定義の静的変数が原因で発生します。
問題の詳細
提供されたコードでは、クラス Log のヘッダーで宣言された静的変数 theString があります。ファイル Log.h は存在しますが、実装ファイル Log.cpp では定義されていません。この結果、リンカーはコンパイル中に変数への参照を解決できなくなります。
解決策
このエラーを解決するには、実装で静的変数を定義する必要があります。ファイル。
// Log.cpp #include "Log.h" #include <iostream> string Log::theString; // Define static here void Log::method(string arg) { theString = "hola"; cout << theString << endl; }
追加推奨事項
名前空間 std を使用して行を削除することも推奨されます。ヘッダーが含まれる場所であればどこでも std でグローバル名前空間を汚染するため、ヘッダー ファイルから削除されます。代わりに、オブジェクトを使用するときに std 名前空間を明示的に指定する必要があります。
// Log.h #include <iostream> #include <string> class Log { public: static void method(std::string arg); private: static std::string theString; };
以上がC で静的変数を使用すると「アーキテクチャ i386 の未定義シンボル」が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。