使用 C++ 和 Objective-C 代码将 C++ 库链接到库

Linking C++ library against library with C++ and Objective-C code

提问人:Yellow 提问时间:1/22/2019 最后编辑:Yellow 更新时间:1/22/2019 访问量:110

问:

我有一个库,它是从 C++ 和 Objective-C 代码的组合构建的,为 iOS 构建。我有另一个 C++ 项目链接到这个库,显然尝试调用它的函数。libDinosaurs-ios.a

Objective-C 代码位于:

// Utils.mm
const char* findApplicationPath()
{
  NSString* appDirectory = [[NSBundle mainBundle] resourcePath];
  return [appDirectory UTF8String];
}

调用 的 C++ 代码位于:

// Dinosaurs.cpp
FILE* Dinosaurs::openFile(char const* pInFileName)
{
 char applePath[IOS_PATH_MAX];
 strcpy(applePath, findApplicationPath());
 strcat(applePath, "/");
 strcat(applePath, pInFileName);
 FILE* pFile = fopen(applePath, "rb")
 return pFile;
}

该库似乎正确地编译到上述文件中。当我将一个新项目链接到这个库时,问题就出现了。最初在 Objective-C 代码中的所有函数都会产生以下链接错误:.a

Undefined symbols for architecture armv7:
"findApplicationPath()", referenced from:
  Dinosaurs::openFile(char const*) in libDinosaurs-ios.a(Dinosaurs.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

为了让事情变得更困难,我没有用于我尝试构建的项目的 Xcode 项目,只有一个 CMake 文件。是什么原因导致了此错误,我该如何解决?我尝试了链接器标志,但这并没有解决它:-ObjC

set_target_properties(DinosaurZoo PROPERTIES LINK_FLAGS "-ObjC" )
C++ iOS Objective-C 链接器错误

评论

0赞 Matthieu Brucher 1/22/2019
什么是未定义的引用/未解析的外部符号错误以及如何修复它?
0赞 Matthieu Brucher 1/22/2019
显然它不在图书馆里。可能不是正确的架构。
0赞 Yellow 1/22/2019
@MatthieuBrucher这个线程太笼统了,它真的不是很有用。这个问题涉及一个非常具体的问题,即将库与 Objective-C 和 C++ 函数链接起来。你能更具体地说“不是正确的架构”吗?
0赞 Matthieu Brucher 1/22/2019
Undefined symbols for architecture armv7: 你确定你有那个平台的符号吗?(findApplicationPath)
0赞 Yellow 1/22/2019
我不确定对于一个特定平台,该库如何编译所有其他(C++)函数,而不是Objective-C函数,而不会出现错误

答: 暂无答案