如何在 Objective-C 项目的 Xcode 中编译 + link C++ 代码?
How do I compile + link C++ code in Xcode in an Objective-C project?
我有一个 iOS 项目,其中包含大量 Obj-C 源代码和一些 .cpp
文件。
我在 Xcode 6 中创建了一个 C++ class CalibrationFileReader
,它有一个 .h
和一个 .cpp
文件。我可以在我的 Objective-C 代码中使用 class。
我有第二对 C++ 文件(stereo_v3.hpp
、stereo_v3.cpp
),它们不包含 class,但只包含静态函数。那些我从外部添加到项目中的。当我尝试使用其中一个函数 (computePoseDifference
) 时,它编译正常但 Xcode 拒绝 link,抱怨
Undefined symbols for architecture arm64:
"computePoseDifference(cv::Mat const&, cv::Mat const&, cv::Mat&, cv::Mat&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
我尝试过的事情:
- 正在 Xcode 中创建文件并将原始代码粘贴到其中
- 为我的目标手动将
.cpp
文件添加到 编译源 中的 构建阶段 (见图)。
问题都没有解决。
好吧,事实证明 Xcode 不是罪魁祸首,而是我在函数声明前加上的 static
修饰符。所以这个问题为时过早。我早该知道,但当然,静态链接使它们对其他翻译单元不可见。
我有一个 iOS 项目,其中包含大量 Obj-C 源代码和一些 .cpp
文件。
我在 Xcode 6 中创建了一个 C++ class CalibrationFileReader
,它有一个 .h
和一个 .cpp
文件。我可以在我的 Objective-C 代码中使用 class。
我有第二对 C++ 文件(stereo_v3.hpp
、stereo_v3.cpp
),它们不包含 class,但只包含静态函数。那些我从外部添加到项目中的。当我尝试使用其中一个函数 (computePoseDifference
) 时,它编译正常但 Xcode 拒绝 link,抱怨
Undefined symbols for architecture arm64:
"computePoseDifference(cv::Mat const&, cv::Mat const&, cv::Mat&, cv::Mat&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
我尝试过的事情:
- 正在 Xcode 中创建文件并将原始代码粘贴到其中
- 为我的目标手动将
.cpp
文件添加到 编译源 中的 构建阶段 (见图)。
问题都没有解决。
好吧,事实证明 Xcode 不是罪魁祸首,而是我在函数声明前加上的 static
修饰符。所以这个问题为时过早。我早该知道,但当然,静态链接使它们对其他翻译单元不可见。