私はGCCに問題があります。私のグローバル変数を見つけることができません。GCCリンカーは、既存のグローバル変数への未定義参照について文句を言います
a.cpp:
#include "b.h"
const char * const g_test = "blah blah";
int main(){
test();
return 0;
}
b.cpp:
#include <iostream>
#include "a.h"
using namespace std;
void test(){
cout << g_test;
}
ああ:
extern const char * const g_test;
BH:
私は、問題を特定するために、サンプルC++プロジェクトを作成しましたvoid test();
は、私はこのようにそれをコンパイルします。
$ g++ -o a.o -c a.cpp
$ g++ -o b.o -c b.cpp
$ g++ -o test a.o b.o
b.o: In function `test()':
b.cpp:(.text+0x7): undefined reference to `g_test'
collect2: error: ld returned 1 exit status
何も変更しない最後のコマンドでオブジェクトファイルの順序を変更します。
なぜリンカはエラーをスローしますか?私は単に実行可能な印刷 "愚かな言葉"を作成することを期待していたが、何とかエラーが表示されます。私はそれが失敗する理由を見ません。
'a.cpp'は' a.h'をインクルードする必要はありませんか? – NathanOliver
私は、constにはC++の内部リンケージがあるという事実と関係があると思います。 –
@Haatschii私の文字列は最後のバイナリに2回含まれませんか? – NieDzejkob