提问人:Yellow 提问时间:1/22/2019 最后编辑:Yellow 更新时间:1/22/2019 访问量:110
使用 C++ 和 Objective-C 代码将 C++ 库链接到库
Linking C++ library against library with C++ and Objective-C code
问:
我有一个库,它是从 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" )
答: 暂无答案
评论
Undefined symbols for architecture armv7
: 你确定你有那个平台的符号吗?(findApplicationPath
)