未定义符号:_OBJC_CLASS_$_仅在模拟器上

问题描述 投票:0回答:1

我确信这对于比我有更客观的 C 经验的人来说会很容易。我没有写这个,但我一直在使用它。

我有一个 .h 文件:带有接口的 bleconfigLibrary:

@interface bleconfigLibrary : NSObject.  

在另一个 .m 文件中,我有:

#import <Foundation/Foundation.h>
#import "BTCommands.h"
#import "bleconfigLibrary.h"
#define MAX_BUF_SIZE                (512)
@implementation BTCommands
bleconfigLibrary *handleRequest;

+ (void)initialize{
   handleRequest = [bleconfigLibrary alloc];
}   

问题似乎是:

handleRequest = [bleconfigLibrary alloc];

当我尝试在模拟器上运行时,出现错误:

Undefined symbol: _OBJC_CLASS_$_bleconfigLibrary

但它在物理设备上运行良好。如果我注释掉该部分,它就会在模拟器上运行。 任何帮助将不胜感激。

ios objective-c xcode ios-simulator
1个回答
0
投票

您已经为

@interface
定义了
bleconfigLibrary
,但在此处显示的代码中尚未为其定义
@implementation
。事实上它适用于物理设备但不适用于模拟器,这表明您正在链接一个定义实现的库,但该库不是为模拟器构建的。 (可能它是一个老式的“胖”库,不是为 Apple Silicon 构建的。)该库需要重建为 xcframework。 (虽然链接页面讨论了 Swift,但 xcframeworks 也适用于 ObjC。)

但请注意,BLE 功能通常在模拟器中不起作用,因此您可能更愿意不为模拟器构建此代码。

此行不正确:

handleRequest = [bleconfigLibrary alloc];

分配内存,但不初始化对象。虽然它可能“有效”(例如,如果对象碰巧不需要初始化),但这里正确的行是:

handleRequest = [bleconfigLibrary new];

或等价:

handleRequest = [[bleconfigLibrary alloc] init];

顺便说一句,ObjC 类应该以大写字母开头(尽管这不是强制性的)。

(我假设您的

.
定义末尾的
@interface
是您问题中的拼写错误,因为它无法在 ObjC 中编译。)

© www.soinside.com 2019 - 2024. All rights reserved.