在使用GCC 4.8的Mac上出现“error: too many #pragma options align=reset”错误

3
我使用MacPorts将gcc的版本更新到4.8.1。我想使用这个版本来构建libusbx 1.0.17。但是当我执行'./configure',然后'make' libusbx时,我会收到“error: too many #pragma options align=reset”的错误消息(请参见下方的错误消息),并且构建失败。如果我使用'CC=clang ./configure'配置libusbx然后再进行'make',它可以正常工作,但那是使用gcc 4.2构建的,这不是我想要的。有没有办法在Mac上使用gcc 4.8构建libusbx?谢谢。
make  all-recursive
Making all in libusb
  CC       libusb_1_0_la-core.lo
  CC       libusb_1_0_la-descriptor.lo
  CC       libusb_1_0_la-io.lo
  CC       libusb_1_0_la-strerror.lo
  CC       libusb_1_0_la-sync.lo
  CC       libusb_1_0_la-hotplug.lo
  CC       os/libusb_1_0_la-threads_posix.lo
  CC       os/libusb_1_0_la-darwin_usb.lo
In file included from /System/Library/Frameworks/IOKit.framework/Headers/usb/IOUSBLib.h:27:0,
                 from os/darwin_usb.h:27,
                 from os/darwin_usb.c:43:
/System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h:576:9: error: too many #pragma options align=reset
 #pragma options align=reset
         ^
In file included from /System/Library/Frameworks/IOKit.framework/Headers/usb/IOUSBLib.h:27:0,
                 from os/darwin_usb.h:27,
                 from os/darwin_usb.c:43:
/System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h:746:9: error: too many #pragma options align=reset
 #pragma options align=reset
         ^
/System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h:797:9: error: too many #pragma options align=reset
 #pragma options align=reset
         ^
/System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h:815:9: error: too many #pragma options align=reset
 #pragma options align=reset
         ^
/System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h:835:9: error: too many #pragma options align=reset
 #pragma options align=reset
         ^
os/darwin_usb.c: In function 'darwin_get_device_descriptor':
os/darwin_usb.c:58:76: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define DARWIN_CACHED_DEVICE(a) ((struct darwin_cached_device *) (((struct darwin_device_priv *)((a)->os_priv))->dev))
                                                                            ^
[...]'

在USB.h文件中,#pragma指令的形式似乎是这样的。
#pragma pack(1)
... struct ....
#pragma options align=reset

有没有适用于gcc 4.8的等效版本?它们似乎都正确配对,所以问题肯定是gcc 4.8不理解其中一个或另一个。

1个回答

2

我通过更改/System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h文件中的所有行,成功编译了它。

"#pragma options align=reset"

"#ifdef __clang__
    #pragma options align=reset
#else
    #pragma pack()
#endif"

我可以确认这个可行。有没有可能成为一个补丁/被mac收录作为修复的一部分? - keflavich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接