Единственная причина, по которой C не будет ссылаться, заключается в том, что компилятор считает, что нужен символ Foo.
Так как C не относится к символам Foo, должна быть еще одна причина, почему компоновщику нужен символ.
Единственная другая причина, о которой я знаю, это какой-то экспорт. Я знаю только Visual C ++, поэтому я предлагаю вам найти какой-то эквивалент __declspec( dllexport )
в предварительно обработанных файлах и посмотреть, что его генерирует.
Вот что я хотел бы сделать: сохранить результаты препроцессора в отдельном файле и найти их в Foo. Либо это будет происходить как экспорт, либо компилятор ссылался на него каким-то образом.