在objc库中调用包装的静态c++库会导致链接器错误
Call of a wrapped static c++ library in an objc library causes linker error
我有一个cpp静态库,并试图将其包装在静态obj-c库中,以便从外部看起来像普通的obj-c库。我的obj-c库编译得很好,但是当我尝试在应用程序中使用这个库时,我得到以下链接器错误:
Apple Mach-O Linker (Id) Error
Undefined symbols for architecture i386:
"operator new(unsigned long)", referenced from:
...
所有的库在任何需要的架构中都可以很好地编译。
我的包装器库看起来像这样:
ObjcLib.h
@interface ObjcLib: NSObject{
}
- (void) doSomething:(NSString*)text;
@end
ObjcLib.mm
#import "ObjcLib.h"
#import "apiFromCppLib.h"
@interface ObjcLib (){
@private
cppApiNamespace::BaseApi* api;
}
@end
@implementation ObjcLib
- (void) doSomething:(NSString*)text{
api = new cppApiNamespace::BaseAPI();
}
在我的App中我添加了ObjcLib。链接二进制与库。此外,图书馆搜索路径是正确的,但当我尝试用[ObjcLib alloc]创建对象时,我得到上面提到的链接器错误。我正在使用XCode4与LLVM编译器3.0
希望有人能给我一个提示什么可能是错误的,如果我的包装是正确的。
编辑:在应用程序的构建设置中添加-lstdc++作为其他链接器标志解决了许多链接器错误,但不是全部。解决的是ObjcLib.h和ObjcLib.mm中的cpp命令。剩下的是来自BaseAPI内部的一些方法调用。我们将仔细研究一下,是什么使这个方法调用与其他可以正确链接的方法调用不同。
我不熟悉你的编译器或项目,但听起来像标准库没有被链接。-lstdc++
选项修复任何东西吗?
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'