• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 15:28:37 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用“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 "rintViewController.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)

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

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. 如何避免这种情况?



Best Answer-推荐答案


该错误是由.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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap