使用LTO但没有提供很多信息,当加载/存储的LD验证失败

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

更新到Xcode的10后,当用-Os和-flto建立了我们的C ++代码库没有链接。提供了以下错误:

ld: Explicit load/store type does not match pointee type of pointer operand (Producer: 'APPLE_1_1000.11.45.2_0' Reader: 'LLVM APPLE_1_1000.11.45.2_0') for architecture x86_64

(最新的Xcode 10.1贝塔3发生相同的误差)

相同的代码建立精细和Xcode 9.可悲接头不提供任何比吐出上述错误信息的详细信息。关于目标文件的一些信息将是设法找出问题的确切来源十分有帮助。卸下-flto消除错误...

没有人有任何调试建议/想法?我们试图用“--trace”使用ld获得更多信息的文件正在处理,但正在打印,只是获取与错误和输入文件之间没有明显的相关性迹线的中间输出的错误信息时刻。

这一切都闻起来很编译错误的,我已经通过bug跟踪报道这个苹果。

任何额外的帮助,将不胜感激。谢谢

macos llvm ld xcode10
1个回答
0
投票

在我的情况下转向-O1,2,3吐出这个错误(同时-flto为关闭)我就跟踪到以下问题的任何优化。我做了一个类Algo_three - 这样我可以从一个函数返回3个值:

@interface Algo_three<T,V,W> : NSObject{
@public
    T p_0;
    V p_1;
    W p_2;
}

+ (Algo_three<T,V,W>*) first:(T) f second:(V) s third:(W) t;
@end

我用它如下(.m文件)

+(Algo_three<NSManagedObjectContext*,NSManagedObjectContext*,NSError*>*) CreateCDContexts: ....
{
    return [Algo_three first:ui_managedObjectContext second:sync_managedObjectContext third:nil];
}

接受3个值 - 这是一样好..

Algo_three<NSManagedObjectContext*,NSManagedObjectContext*,NSError*> * two_contexts = [not_important_class CreateCDContexts: ... ];

//and here is accessing
self->ui_context = (NSManagedObjectContext*) two_contexts->p_0; //getting 1st value
self->sync_context = (NSManagedObjectContext*) two_contexts->p_1; //2nd value

注释掉最后两行删除错误!所以我增加了三个访问属性类Algo_three和它的工作。 Algo_three类lookes像这样(.H)。

@interface Algo_three<T,V,W> : NSObject{
@public
    T p_0;
    V p_1;
    W p_2;
}
@property (strong,nonatomic) T first;
@property (strong,nonatomic) V second;
@property (strong,nonatomic) W third;

+ (Algo_three<T,V,W>*) first:(T) f second:(V) s third:(W) t;
@end

这些属性(.M)的执行情况:

- (id) first{
    return p_0;
}
-(void) setFirst:(id) obj{
    self->p_0 = obj;
}
- (id) second{
    return p_1;
}
-(void) setSecond:(id) obj{
    self->p_1 = obj;
}
- (id) third{
    return p_2;
}
-(void) setThird:(id) obj{
    self->p_2 = obj;
}

并且代替 - > P_0访问经由性能。首先,完成。第二

self->ui_context = (NSManagedObjectContext*) two_contexts.first;
self->sync_context = (NSManagedObjectContext*) two_contexts.second;

最后我不得不承认 - 是编译器告诉我的错误是什么位于文件中,尽管不是那么清楚。的XCode 10.1(10B61)。我仔细检查这仅仅是编译器错误之前的文件 - 我通过运行命令行存档为证。

xcodebuild -scheme MY_PROJ archive
© www.soinside.com 2019 - 2024. All rights reserved.