2013-10-21 38 views
3

我使用macports将gcc更新到版本4.8.1。我想使用该版本来构建libusbx 1.0.17。但是当我'./configure'然后'make'libusbx时,我得到了“错误:太多的#pragma options align = reset”(见错误信息),并且无法构建。如果我用'CC = clang ./configure'配置libusbx,然后'make',它工作正常,但是用gcc 4.2编译,这不是我想要的。有没有什么办法可以在mac上用gcc 4.8来编译libusbx?谢谢“error:too many #pragma options align = reset”on gcc 4.8

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 pack(1) 
... struct .... 
#pragma options align=reset 

对于gcc 4.8有什么作用?它们似乎都是正确配对的,所以问题一定是gcc 4.8不能理解其中一个。

回答

2

我能够得到它通过改变所有行的文件 编译/System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h与

"#pragma options align=reset" 

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

我可以证实这个工作。有没有可能将它作为修补程序接受/作为mac修复? – keflavich