g++ main.c f.c
以下は g++-4.2.1 で動作します
g++ -O3 main.c f.c
が、警告が表示されます
/usr/libexec/gcc/powerpc-apple-darwin8/4.2.1/ld: Undefined symbols:
int f<int>(int const*)
collect2: ld returned 1 exit status
// main.c
template <typename T>
int f( const T* A );
int main()
{
int* A = new int[10];
int ftemplate = f( A );
}
// f.c
template <typename T>
int f( const T* A )
{ return A[0];
}
int call_f()
{ int* A = new int[10];
return f( A ); // ok here but not from main()
}
macosx 10.4.11 powerpc-apple-darwin8-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. ビルド 5564) では、
-O2
動作しますが、-O3
動作しません。
macosx 10.7.4 i686-apple-darwin11-llvm-g++-4.2 ( https://github.com/kennethreitz/osx-gcc-installerから) では、
プレーンなg++ *.c
動作でg++ -O *.c
同じld: Undefined symbols
エラーが発生します。
たぶんバグ g++ <-> 古い /usr/bin/ld ? 愚かなことをした可能性が高い...
誰か助けてくれますか、またはこれが Mac 以外で動作するかどうかを確認できますか? ありがとう !