我们在项目中使用GCC预编译头文件,并按如下方式构建它们:
gcc $(CFLAGS) precompiledcommonlib.h
Run Code Online (Sandbox Code Playgroud)
现在我正在OSX 10.6上构建项目,并尝试同时使用为所有体系结构构建的漂亮功能,如下所示:
gcc $(CFLAGS) -c -arch i386 -arch x86_64 commonlib.c
Run Code Online (Sandbox Code Playgroud)
但是,似乎这对预编译的头文件不起作用:
gcc $(CFLAGS) -arch i386 -arch x86_64 precompiledcommonlib.h
Undefined symbols for architecture i386:
"_main", referenced from:
start in crt1.10.6.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
Undefined symbols for architecture x86_64:
"_main", referenced from:
start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
lipo: can't open input file: /var/folders/z1/z1A0sPkqGDyPrZWo9ysVK++++TI/-Tmp-//cc3W2gwd.out (No such file or …Run Code Online (Sandbox Code Playgroud) 我在定义声明它的类之外的内部类时遇到了问题.
struct Base {
struct A {
struct B;
};
struct A::B {
};
};
Run Code Online (Sandbox Code Playgroud)
它编译并与GCC一起工作但在Clang上失败并出现此错误:
innerclass.cpp:6:12: error: non-friend class member 'B' cannot have a qualified name
struct A::B {
~~~^
Run Code Online (Sandbox Code Playgroud)
如果省略最外面的类Base,则代码适用于Clang.
以这种方式定义内部类是不合法的吗?如果是这样,应该怎么做?
平台:
OS X 10.8.3
XCode 4.6.2
Clang Apple LLVM版本4.2(clang-425.0.24)(基于LLVM 3.2svn)
GCC gcc版本4.2.1(基于Apple Inc. build 5658)(LLVM build 2336.11. 00)