Мой тест имеет два файла:Неопределенная ссылка вопрос с минимальным "экстерном" тест использование случае
a.cc:
#include <iostream>
using namespace std;
const string program_name("myprog");
b.cc:
#include <iostream>
using namespace std;
extern const string program_name;
int main(int argc, char **argv) {
cout << program_name << endl;
return 0;
}
При компиляции , Я получаю следующий результат:
$ g++ -c a.cc -o a.o -std=c++11 -O2
$ g++ -c b.cc -o b.o -std=c++11 -O2
$ g++ a.o b.o -o case
b.o: In function `main':
b.cc:(.text.startup+0x7): undefined reference to `program_name'
collect2: error: ld returned 1 exit status
В a.o, у меня есть следующий символ:
0000000000000018 b _ZL12program_name
И в b.o:
U program_name
вопрос: почему я снимаю себе в ногу здесь?
Примечание: г ++ 4.9.1
Спасибо! Я решил это, добавив «extern» к определению. – ivarec