Sto vivendo un problema estremamente strano in una nuova installazione di OSX 10.4.11 + Xcode 2.5. L'ho ridotto ad un caso di test minimale. Ecco test.cpp:g ++ fallisce misteriosamente solo se un file .h si trova in una determinata directory
#include "macros.h"
int main (void)
{
return 1;
}
Ed ecco macros.h:
#ifndef __JUST_TESTING__
#define __JUST_TESTING__
template<typename T> void swap (T& pT1, T& pT2)
{
T pTmp = pT1;
pT1 = pT2;
pT2 = pTmp;
}
#endif //__JUST_TESTING__
Questo compila e funziona bene se entrambi i file sono nella stessa directory. TUTTAVIA, se metto macros.h in/usr/include/gfc2 (è parte di una libreria personalizzata che uso io) e cambiare il # include nel test.cpp, la compilazione non riesce con questo errore:
/usr/include/gfc2/macros.h:4: error: template with C linkage
ho ricercato quell'errore e la maggior parte dei commenti indicano una "C esterna penzolante", che non sembra affatto il caso.
Sono a perdita completa qui. È g ++ per qualche ragione supponendo che tutto in /usr/include/gfc2
sia C anche se è incluso da un file .cpp che non dice extern "C" da nessuna parte?
Qualche idea?
EDIT: Non compilare se uso il percorso completo nella #include
, vale a dire #include "/usr/include/gfc2/macros.h"
EDIT2: Non è inclusa l'intestazione sbagliata. Ho verificato questo utilizzando cpp
, g++ -E
, e la ridenominazione macros.h
a foobarmacros.h
Questo è un totale, senza speranza, disinformato da un milione di anni fa al buio, ma provare a rimuovere la "c" dal nome della directory. :) – datageist
Prova a pubblicare i risultati di "set | grep -i include" qui. –
@datageist - Grazie, ma non ha fatto la differenza. Stranamente, si compila se io includo il suo percorso completo. Hmmm ... – ggambett