C ++编译问题 - 体系结构x86_64的未定义符号 - Mac Os X Mountain Lion

时间:2013-03-28 12:17:26

标签: c++ macos compilation linker g++

我有一个我无法解决的编译问题。我正在开发Mac OS X 10.8和Windows上的跨平台C ++项目编码。代码在Windows和Mac Os X Leopard上编译并运行良好。

由于Apple出于各种原因推动开发人员坚持使用最新平台,因此我不得不在Mountain Lion上开发,我正试图让项目重新开始工作。

我正确编译了我需要的所有库(wxWidgets等),并在最新版本的Eclipse中导入了该项目。当我尝试构建项目时,它尝试编译firts .cpp文件,最后它(为什么?)尝试调用链接器,导致我自己定义的类的一系列缺失符号。其他.cpp文件都没有被编译,因此整个过程失败的原因很不合理。

我也尝试从CLI调用make,结果相同。我进入了makefile,一切似乎都正确。它看起来像一个非常新手的问题,我觉得我在这里错过了一些巨大的东西。

我正在粘贴在编译器的输出之下,以防一些编译大师介入。请随时询问更多详细信息。

编译器输出

Pastebin Link:Compiler output

我使用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找不到符号)。

谢谢,

埃维莉娜

1 个答案:

答案 0 :(得分:0)

转到目标的“构建阶段”部分,验证编译和链接所需的所有文件是否实际包含在正确的部分中。

听起来好像没有告诉编译器包含你需要的东西。