我遇到了无法解决的编译问题。我正在 Mac Os X 10.8 和 Windows 上开发跨平台 C++ 项目编码。该代码在 Windows 和 Mac Os X Leopard 上也能正常编译和运行。
由于 Apple 出于各种原因推动开发人员坚持使用最新平台,我被迫在 Mountain Lion 上进行开发,我正试图让该项目再次运行。
我正确编译了我需要的所有库(wxWidgets 等),并在最新版本的 Eclipse 中导入了项目。当我尝试构建项目时,它会尝试编译第一个 .cpp 文件,最后它(为什么?)尝试调用链接器,导致我自己定义的类缺少一系列符号。其他 .cpp 文件都没有被编译,所以整个过程失败的原因是可以理解的。
我还尝试从 CLI 调用 make,结果相同。我进入了makefile,一切似乎都是正确的。它看起来像一个非常新手的问题,我觉得我在这里错过了一些巨大的东西。
我粘贴在编译器的输出下方,以防万一编译大师介入。请随时询问更多详细信息。
编译器输出
Pastebin 链接:编译器输出
我使用了 PB,因为输出非常大。
相关部分是在第一个 .cpp 文件的编译阶段之后不久调用as和collect2 。缺少的符号在同一目录中的其他 .cpp 文件中定义。
/usr/llvm-gcc-4.2/bin/../libexec/gcc/i686-apple-darwin11/4.2.1/as -arch x86_64 -force_cpusubtype_ALL -o /var/folders/br/h6ln_j014ll56zwc8x6xjmk80000gn/T//ccSUmHal.o /var/folders/br/h6ln_j014ll56zwc8x6xjmk80000gn/T//ccn8ex81.s
/usr/llvm-gcc-4.2/bin/../libexec/gcc/i686-apple-darwin11/4.2.1/collect2 -dynamic -arch x86_64 -macosx_version_min 10.8.3 -weak_reference_mismatches non-weak -o Calcoli.o -lcrt1.10.6.o -L/usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin11/4.2.1/x86_64 -L/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/x86_64 -L/usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin11/4.2.1 -L/usr/llvm-gcc-4.2/bin/../lib/gcc -L/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1 -L/usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin11/4.2.1/../../.. -L/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/../../.. /var/folders/br/h6ln_j014ll56zwc8x6xjmk80000gn/T//ccSUmHal.o -lstdc++ -lSystem -lgcc -lSystem
编译器输出以“经典”未定义符号问题结束。所有强调文字*强调文字*强调文字
Undefined symbols for architecture x86_64:
"typeinfo for TipoPuntoCalc", referenced from:
Calcoli::setPuntoS(GTGraphicObject*) in ccSUmHal.o
"typeinfo for TipoPali", referenced from:
Calcoli::setPaloS(GTGraphicObject*) in ccSUmHal.o
"typeinfo for TipoRett", referenced from:
Calcoli::setFondazioneS(GTGraphicObject*) in ccSUmHal.o
"_main", referenced from:
start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [Calcoli.o] Error 1
这不应该是与架构相关的问题,因为将 i386 指定为目标具有相同的结果(未找到架构 i386 的符号)。
谢谢,
伊芙琳娜