【问题标题】:"error: too many #pragma options align=reset" on mac with gcc 4.8带有 gcc 4.8 的 Mac 上的“错误:太多#pragma 选项对齐=重置”
【发布时间】:2013-10-21 21:06:04
【问题描述】:

我使用 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?谢谢

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 不理解其中之一。

【问题讨论】:

    标签: c++ macos gcc pragma libusb


    【解决方案1】:

    我能够通过更改所有行来编译它 在文件/System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h 中

    "#pragma options align=reset"
    

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

    【讨论】:

    • 我可以确认这行得通。有没有可能这会被接受为补丁/被mac作为修复程序包含在内?
    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    相关资源
    最近更新 更多