从 ObjC 代码调用 .mm 类方法时编译错误

Compile error calling .mm class method from ObjC code

本文关键字:编译 错误 类方法 mm ObjC 代码 调用      更新时间:2023-10-16

我正在尝试使用 Adobe XMP Toolkit SDK 将 XMP 附加到某些 PNG 文件。SDK 提供了一些示例,我已经修改了其中一个以满足我的需求。SDK 是用 C++ 编写的,所以我修改的示例类是 .mm 类。

这是类:

void attachXMPToImage ( string * rdf, string imageName, string software, string softVersion, string referencia, string fecha )
{
//    if ( argc != 2 ) // 2 := command and 1 parameter
//    {
//        cout << "usage: ModifyingXMP (filename)" << endl;
//        return 0;
//    }
string filename = imageName;
string rdfFile = *rdf;
if(!SXMPMeta::Initialize())
{
cout << "Could not initialize toolkit!";
// return -1;
}
XMP_OptionBits options = 0;
#if UNIX_ENV
options |= kXMPFiles_ServerMode;
#endif
}

我没有发布整个类,因为这里的问题是从我的 ObjC 代码调用此方法。

此类有自己的标头,如下所示:

#import <Foundation/Foundation.h>
@interface XmpWriter : NSObject
+ (void)attachXMPToImage:(NSString*)rdf
imageName:(NSString*)imageName
software:(NSString*)software
softVersion:(NSString*)softVersion
referencia:(NSString*)referencia
fecha:(NSString*)fecha;
@end

然后,从我的其他类之一中,我尝试调用该方法:

[XmpWriter attachXMPToImage:nil
imageName:k_IMAGE_NAME
software:@"My iOS App"
softVersion:@"v. 1.0"
referencia:@""
fecha:timeString];

但是当我尝试编译时,出现错误:

架构 arm64 的未定义符号:"_OBJC_CLASS_$_XmpWriter", 参考自: objc-class-ref in Myclass.o

我做错了什么?

最后,我已经能够找到一个例子并解决了问题。

问题在于我在 .mm 类中调用该方法的方式。我不得不将其更改为:

+ (void) attachXMPToImage:(NSString*)rdf imageName:(NSString*)imageName software:(NSString*)software softVersion:(NSString*)softVersion referencia:(NSString*)referencia fecha:(NSString*)fecha