Компилятор Visual C ++ содержит специальные директивы для предварительно скомпилированных заголовков, и часто они называются stdafx.h
, поэтому я опишу эту обработку и посмотрю, является ли это проблемой.
Каждый файл, использующий stdafx.h
в качестве предварительно скомпилированного заголовка, будет иметь эту строку вверху.
#include "stdafx.h"
Обычно это означает, что компилятор ищет stdafx.h
в той же исходной папке, что и файл, в который он был включен. Однако, когда stdafx.h
является предварительно скомпилированным заголовком, компилятор Visual C ++ автоматически включает в себя stdafx.h
предварительно скомпилированный вывод проекта, независимо от того, где находится заголовок stdafx.h
или выходные данные. Когда тот же проект компилируется в GCC, GCC не будет знать, где находится файл, если он находится в другой папке. Вам нужно будет правильно указать путь включения проекта, чтобы каждый связанный с препроцессором #include
мог найти нужный файл.
Обычно, когда включаемый файл находится в неизвестной папке, указанной только директивой компилятора [-I
], включаемая запись записывается как:
#include <filename.h>
К сожалению, Visual C ++ не позволяет использовать эту нотацию для предварительно скомпилированного заголовка, и вы должны полагаться на GCC, следуя путям включения, даже для файлов, указанных с помощью "" (двойные кавычки). Такое поведение может быть или не быть в стандарте C ++, но единственное, что вы хотите убедиться, это то, что у вас нет лишних / непредусмотренных stdafx.h
файлов в дереве исходного кода, или вы можете столкнуться с еще большим неожиданные различия скомпилированного кода между VC ++ и GCC.