c++ - "error: too many #pragma options align=reset"在 mac 上与 gcc 4.8

标签 c++ macos gcc pragma libusb

我使用 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 似乎采用这种形式。

#pragma pack(1)
... struct ....
#pragma options align=reset

适用于 gcc 4.8 的等效项是什么?它们似乎都正确配对,所以问题一定是 gcc 4.8 不理解一个或另一个。

最佳答案

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

"#pragma options align=reset"

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

关于c++ - "error: too many #pragma options align=reset"在 mac 上与 gcc 4.8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19504726/

相关文章:

c++ - stm32f4 g++ 错误涉及newlib _kill_r,_kill, _getpid_r, _getpid,

linux - 在 Linux 中安装 Boost

c++ - 您能解释一下 C++ 世界中的符号和调试符号吗?

bash - 如何让 GNU screen 识别 UTF-8 字符

创建其构造函数引用全局变量的类的全局实例时,c++程序崩溃

macos - macOS 应用程序组名称应该以 `group.` 还是开发团队 ID 开头?

Java 鼠标事件未在 OSX 上注册

c - gcc 汇编字符串表示

c++ - 使用 libcurl 下载目录中的所有文件

c++ - 如何在 gtk+ 中创建图形