gpt4 book ai didi

iphone - 在 Objective-C block 中调用 C 函数(链接器错误)

转载 作者:太空宇宙 更新时间:2023-11-04 00:38:40 25 4
gpt4 key购买 nike

我已经创建了 C 函数:

标题

//FileSystem.h file
#import <Foundation/Foundation.h>
BOOL AddSkipBackupAttributeToItemAtURL(NSURL *url);

实现

//FileSystem.mm
#import "FileSystem.h"
#import <sys/xattr.h>
#import <Support/Support.h>

static const char* attrName = "com.apple.MobileBackup";
BOOL AddSkipBackupAttributeToItemAtURL(NSURL *url) {
BOOL operationResult = NO;
// some implementation
return operationResult;
}

当我从应用程序的另一部分调用 AddSkipBackupAttributeToItemAtURL 时,一切正常,除了我从 block 中调用函数的地方。

__block UpdateFileAsyncOperation* selfOperation = self;
_contentDownloader.completionBlock = ^(NSData* data) {
[data saveForcedToPath:selfOperation.filePath];
NSURL* fileUrlWithScheme = [NSURL fileURLWithPath:selfOperation.filePath];
AddSkipBackupAttributeToItemAtURL(fileUrlWithScheme);
[runLoop removePort:port forMode:NSDefaultRunLoopMode];
[selfOperation completeOperation];
};

在那个地方,在链接的过程中,出现了错误:

Undefined symbols for architecture i386:
"AddSkipBackupAttributeToItemAtURL", referenced from: __36-[UpdateFileAsyncOperation start]_block_invoke in UpdateFileAsyncOperation.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)

我不明白为什么会这样,它如何取决于 block ?我该如何解决?谢谢!

更新:它不依赖于 block ,我已将函数调用移动到类的另一个地方:错误仍然存​​在。我正在寻找原因

最佳答案

我已经解决了这个问题。它不依赖于 block 。它取决于文件扩展名。

问题文件的扩展名为“.m”,其他文件的扩展名为“.mm”。

所以我将下一个宏放在 FileSystem.h 文件中

#ifdef __cplusplus
extern "C" {
#endif

BOOL AddSkipBackupAttributeToItemAtURL(NSURL *url);

#ifdef __cplusplus
}
#endif

关于iphone - 在 Objective-C block 中调用 C 函数(链接器错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18418559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com