Как скомпилировать и скомпоновать объектные файлы в C++, используя один и тот же заголовочный файл?

У меня возникла проблема, связанная с тем, что компилятор GCC дает сбой, когда дело доходит до связывания двух объектных файлов, которые у меня есть. Оба объектных файла foo1.ccи foo2.ccвключают классы из заголовочного файла с именем foo1.hh. Кроме того, заголовочный файл foo.hhсодержит внешнее объявление экземпляра объекта, который появляется в foo1.cc.

Следует отметить, что заголовочный файл foo.hhбудет определен только один раз между двумя исходными файлами foo1.ccи foo2.cc.

Когда я компилирую исходные файлы с помощью следующей команды, кажется, что все работает:

g++ foo1.cc foo2.cc

Приведенная выше команда создаст исполняемый файл с именем a.out.

Когда я пытаюсь независимо скомпилировать исходные файлы в объектные файлы:

g++ -c foo1.cc
g++ -c foo2.cc
g++ -o foo1.o foo2.o

Компилятор GCC жалуется на неопределенные ссылки на функции в foo2.cc. Эти функции должны быть определены в foo1.cc; однако компоновщик этого не распознает.

Мне интересно, есть ли способ обойти эту проблему с помощью компилятора GCC.

7
задан Paul Roub 28 August 2015 в 19:24
поделиться