Xcode iOS 项目在我添加 C++ 代码时失败

Posted

技术标签:

【中文标题】Xcode iOS 项目在我添加 C++ 代码时失败【英文标题】:Xcode iOS Project Fails When I Add C++ Code 【发布时间】:2014-07-07 11:01:41 【问题描述】:

我有一个 OpenGL Xcode 项目,但是当我想添加 .h.cpp 文件时,即使我告诉不要编译这些文件,它也无法编译。

我得到这个错误:

Apple Mach-O linker error

Undefined symbols for architecture i386:
  "_read_png_image", referenced from:
  read_png_texture(char const*, bool) in TextureUtilities.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

【问题讨论】:

信息不够。这些符号位于源文件中的什么位置?什么引用了它们? 您在发布问题之前是否在 Google 上搜索过错误消息?这方面的文章已经很多了。 根据我的经验,我了解到.cpp 不能编译,我习惯于将.h.cpp 文件合并到.hpp 【参考方案1】:

错误的根本原因是read_png_image() 是一个 C 函数,但已使用 C++ 链接进行编译 - 这会导致包含有关函数参数类型的信息的“错位”符号名称。

解决办法是用extern "C"包装函数的声明:

extern "C"

    void read_png_image(char const*, bool);
 

您添加的.cpp 文件可能包含声明 - 可能形成一个预编译的标头。

【讨论】:

以上是关于Xcode iOS 项目在我添加 C++ 代码时失败的主要内容,如果未能解决你的问题,请参考以下文章

将第三方框架添加到 iOS 应用中的 Xcode 子项目或主项目

IOS如何在目标c中将AFNetworking添加到我的xcode项目中

XCode - iOS - <OCMock/OCMock.h> 文件未找到

无法使用 libpqxx 和 xcode4 (c++) 进行编译

在xcode中编译ios项目时找不到c++头文件

iOS 应用程序的 Xcode 单元测试中的链接问题与嵌入式 C++ 代码