gpt4 book ai didi

ios - 如何避免iOS项目重复符号链接(symbolic link)错误?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:59:39 24 4
gpt4 key购买 nike

我正在使用“Brother Print SDK for iPhone iPad”开发 iOS 应用程序。
可以从here得到.

我将 BRPtouchPrinterKit.framework 拖放到我的应用程序框架文件夹下。
在我的应用程序中,有一个 PrintViewController,我按如下方式导入 header 。

PrinterViewController.h

#import <UIKit/UIKit.h>
#import <BRPtouchPrinterKit/BRPtouchPrinterKit.h>

@interface PrintViewController : UIViewController <BRPtouchNetworkDelegate> {
BRPtouchNetwork* ptn;
BRPtouchNetworkInfo* pti;
}

BRPtouchPrinterKit/BRPtouchPrinterKit.h

#import <Foundation/Foundation.h>
#import "BRPtouchPrinter.h"
#import "BRPtouchNetwork.h"
#import "BRPtouchNetworkInfo.h"
#import "BrPtPJ673_def.h"

@interface BRPtouchPrinterKit : NSObject

@end

如果我在我的其他 View Controller 中导入 PrintViewController,我总是会遇到重复的符号错误。

SettingsViewController.m(非头文件)

#import "PrintViewController.h"
...

链接错误:

    duplicate symbol _printerSeries in: 
/Users/.../PrintViewController.o
/Users/.../SettingsViewController.o

duplicate symbol _rasterGraphicType in:
/Users/.../PrintViewController.o
/Users/.../SettingsViewController.o

ld: 2 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

BRPtouchPrinter.h 文件中定义了符号“_printerSeries”和“_rasterGraphicType”。

typedef enum {
DEFAULT_SERIES,
PT_SERIES,
QL_SERIES
} PRINTER_SERIES;

typedef enum {
TYPE_DEFAULT,
TYPE_G,
TYPE_g
} RASTER_GRAPHIC_TYPE;
PRINTER_SERIES printerSeries;
RASTER_GRAPHIC_TYPE rasterGraphicType;

问题:

  1. 为什么会出现这个链接错误?
  2. 我怎样才能避免这种情况?

最佳答案

错误是因为.h文件中声明了printerSeriesrasterGraphicType这两个全局变量;如您所见,如果将 .h 文件包含在多个位置,则会得到重复的符号。

在我看来,这实际上是 Brother 的一些非常糟糕的编码;这些变量应该被适本地封装在某个对象中的某个地方,但我们无法解决这个问题。

可以做的是创建这些静态变量,以便只有一个符号实例并且链接器错误消失。

编辑 BPRtouchPrinter.h 使其成为

typedef enum {
DEFAULT_SERIES,
PT_SERIES,
QL_SERIES
} PRINTER_SERIES;

typedef enum {
TYPE_DEFAULT,
TYPE_G,
TYPE_g
} RASTER_GRAPHIC_TYPE;

static PRINTER_SERIES printerSeries;
static RASTER_GRAPHIC_TYPE rasterGraphicType

注意:我的代码似乎仍然适用于这些更改,它们看起来应该是共享的全局变量,所以 static 应该没问题,但我不能不保证不会出现问题。

关于ios - 如何避免iOS项目重复符号链接(symbolic link)错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30651709/

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