尝试在mac上构建logstalgia时未定义的符号_main

时间:2009-10-08 21:56:51

标签: c++ xcode macos open-source linker

我一直在尝试在我的Mac(10.5)上构建logstalgia项目(http://code.google.com/p/logstalgia/)。我没有将它正确地链接到系统库,而是构建并添加了项目的所有依赖项。我是新手,但我确实认为我已经做到了这一点,主要是因为我有两个经验丰富的朋友这么说。

添加框架删除了所有编译错误,但我仍然收到链接器错误。它似乎无法找到main()函数。我已经验证我在要编译的源代码中包含main.cpp(使用XCode)并且没有意外的双重声明。我还验证了主函数是否正确声明(没有丢失括号等)。

就好像XCode没有以正确的顺序链接。任何帮助都会非常感激,我很高兴能够解决一个错误! (希望解决这个问题不会打开闸门)。

谢谢, 汉密尔顿

PS - 如果有人愿意的话,我绝对可以提供Xcode项目的拉链!

Checking Dependencies

Ld "/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/build/Debug/Untitled" normal i386
    cd "/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled"
    setenv MACOSX_DEPLOYMENT_TARGET 10.5
    /developer/usr/bin/g++-4.0 -arch i386 -isysroot /developer/SDKs/MacOSX10.5.sdk "-L/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/build/Debug" -L/sw/lib "-L/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/../../pcre-7.9/.libs" -L/opt/local/lib -L/sw/lib "-F/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/build/Debug" -F/Users/hamiltont/Downloads/logstalgia-0.9.2 -F2/src/SDL.framework "-F/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled" -filelist "/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/build/Untitled.build/Debug/Untitled.build/Objects-normal/i386/Untitled.LinkFileList" -mmacosx-version-min=10.5 -framework OpenGL -lpcre -lSDL -lSDL_image-1.2.0 -prebind -o "/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/build/Debug/Untitled"
Undefined symbols:
  "_main", referenced from:
      start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

2 个答案:

答案 0 :(得分:1)

我得到了这个错误消失了。如果我理解,基本上SDL重命名主要功能,以便它可以做一些事情,然后运行你的应用程序,然后清理。事实证明,如果你在Xcode中构建,你必须使用ObjectiveC来编译你的应用程序。

在Xcode中,告诉链接器尝试使用SDL_main(),而不仅仅是main()不起作用(由于某些技术原因,有点超出我的意义)。因此,您包含一些Objective C文件。在Oc中,您可以明确地说出主要类的名称。因此,您包含的Objective C文件似乎只是让Xcode知道要查找SDL_main()

总之,这与Logstalgia无关,但完全是让SDL在Xcode中正确链接的问题。 This link正在谈论这个问题。 SDLMain.h和SDLMain.m是Objective C文件。如果找不到它们,请尝试googleing“在Xcode中设置SDL模板”。我在Xcode中安装了模板,使用其中一个来创建一个空的项目,可以编译,链接和运行(并且什么也不做!)然后我将我想要的项目文件添加到预先配置的项目中。

谢谢!

答案 1 :(得分:0)

仔细检查链接文件列表以确保main.cpp的目标文件存在于那里:

/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/build/Untitled.build/Debug/Untitled.build/Objects-normal/i386/Untitled.LinkFileList

你可能还想预处理main.cpp,以确保main不会被无意中重命名(通过流氓宏)或被省略(通过流氓#if)。