我试图在Mac上构建FLTK 1.3.4-2版本。我遵循了说明,并成功配置了它。
但是当我安装它时,它显示:
Compiling Fl_cocoa.mm...
In file included from Fl_cocoa.mm:55:
In file included from /System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h:12:
In file included from /System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:128:
/System/Library/Frameworks/Foundation.framework/Headers/NSUUID.h:26:49: error: nullability specifier '_Nullable' cannot be applied to
non-pointer type 'uuid_t' (aka 'unsigned char [16]')
- (instancetype)initWithUUIDBytes:(const uuid_t _Nullable)bytes;
^
/System/Library/Frameworks/Foundation.framework/Headers/NSUUID.h:29:30: error: nullability specifier '_Nonnull' cannot be applied to
non-pointer type 'uuid_t' (aka 'unsigned char [16]')
- (void)getUUIDBytes:(uuid_t _Nonnull)uuid;
^
2 errors generated.
make[1]: *** [Fl_cocoa.o] Error 1
make: *** [install] Error 1
有人知道如何解决这个问题吗?
答案 0 :(得分:0)
似乎您构建的系统有点“混搭”,并由此发现了编译器错误。
错误消息表明编译器无法识别用作函数/方法参数类型的数组类型(uuid_t
)成为指针类型(因为C样式数组是按引用而不是按值传递的) )之前会检查_Nullable
/ _Nonnull
的有效性–由于_Nullable
/ _Nonnull
不适用于数组类型,因此会引发错误。
但是,这不仅是您的代码,还是导致错误的系统代码,这令人惊讶。这是混合匹配的来源...
在macOS10.13 SDK之前,导致错误的两种方法initWithUUIDBytes:
和getUUIDBytes:
未使用可空性属性进行注释。默认情况下,Xcode 8.1使用macOS10.12 SDK,并且您的代码应采用这种安排进行编译-包含的标头NSUUID.h
,将不包含可空性属性。
如果您使用数组类型的参数编写了自己的代码,并指定了可空性,则Xcode 8.1的编译器将产生错误-该错误(至少在该编译器中)。但这不是您的代码...
默认情况下, Xcode 9.4.1(最新的9个)使用macOS10.13SDK,并且您的代码将再次编译–包含的头文件将包含可空性属性,并且Xcode 9.4.1的编译器不会产生错误该错误已修复。
因此,最好的猜测是您正在使用Xcode 8.1,但故意安装了macOS10.13 + SDK,或者您已经成功安装了macOS10.13 + SDK标头,并且使用的是gcc
版本其中存在错误,或者您安装了多个版本的Xcode,并且命令行工具不适用于Xcode 8.1(How to switch between multiple Command Line Tools installations in Mac OS X (without installing XCode)可能会有所帮助),或者在某些其他情况下,您的编译器和安装的SDK不匹配–没有其他人,但是您可以知道系统上实际安装了什么;标头文件路径是系统位置,因此引起问题的标头不是FLTK源文件夹中的副本。
HTH
[顺便说一句,您的gcc
来自2007年,如果您正在使用它构建,则可能应该更新到较新的版本。]