- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
根据我对可用性宏和 -mmacosx-version-min
标志如何工作的理解,以下代码在针对 OS X 10.10 时应该无法编译:
#include <Availability.h>
#include <CoreFoundation/CoreFoundation.h>
#include <Security/Security.h>
#if !defined(__MAC_OS_X_VERSION_MIN_REQUIRED)
#error
#endif
#if __MAC_OS_X_VERSION_MIN_REQUIRED < 101000
#error __MAC_OSX_VERSION_MIN_REQUIRED too low
#endif
#if __MAC_OS_X_VERSION_MIN_REQUIRED > 101000
#error __MAC_OSX_VERSION_MIN_REQUIRED too high
#endif
int main() {
size_t len = 0;
SSLContextRef x{};
auto status = SSLCopyRequestedPeerNameLength(x, &len);
return status != 0;
}
因为函数 SSLCopyRequestedPeerNameLength
在 SecureTransport.h
中被标记为在 10.11 中可用:
$ grep -C5 ^SSLCopyRequestedPeerNameLength /System/Library/Frameworks//Security.framework/Headers/SecureTransport.h
/*
* Server Only: obtain the hostname specified by the client in the ServerName extension (SNI)
*/
OSStatus
SSLCopyRequestedPeerNameLength (SSLContextRef ctx,
size_t *peerNameLen)
__OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0);
然而,当我在命令行上使用 -mmacosx-version-min=10.10
进行编译时,尽管有 -Wall -Werror -Wextra
,但我根本没有收到任何警告:
$ clang++ -Wall -Werror -Wextra ./foo.cpp --std=c++11 -framework Security -mmacosx-version-min=10.10 --stdlib=libc++ ; echo $?
0
我是否需要提供一些额外的定义或特定的警告以确保我不会选择对 10.10 以后的 API 的依赖?我真的期望 -mmacosx-version-min=10.10
会阻止使用标记有更高版本号的 API。
我在这里误解了什么?
在此处使用 macOS 10.13.6 上的 XCode 10.0 (10A255)。
最佳答案
现在我可以回答我自己的问题了,我会:您需要将 -Wunguarded-availability
添加到您的编译标志中。只有这样你才会收到警告/错误。
关于c++ - 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52977581/
我看到一个奇怪的行为,我的位域在填充中结束: struct Test { unsigned short a : 1; unsigned short b : 15; }; 当在
我经常需要针对比我当前运行的版本更旧的 Mac OS X 版本。因为我更喜欢使用 bash shell 和 Makefile,所以我不使用 Xcode。苹果 explicitly supports t
我正在尝试为 iOS 模拟器交叉编译库: export CC="clang -arch i386 -mios-version-min=5.0 -isysroot /Applications/Xcode
根据我对可用性宏和 -mmacosx-version-min 标志如何工作的理解,以下代码在针对 OS X 10.10 时应该无法编译: #include #include #include #
我目前使用的是 Mac OSX Big Sur 11.2.3。每当我运行命令时: g++-10 -o project0 project0.cpp -lm -fopenmp 我收到以下错误: clang
当这些二进制文件在 Mac OS X 10.7 下运行时,在 Mac OS X 10.8.2(“Mountain Lion”)下使用 GCC 4.7.2 编译的二进制文件出现非法指令:4 错误。 x(
我在尝试为 Android 构建 Qt 5.5 时遇到错误。“make”命令返回一个错误: arm-linux-androideabi-gcc: error: unrecognized command
我正在运行 10.9.2 并通过 MacPorts (sudo port install gcc48 +universal) 安装了 GCC 4.8.2 并且无法编译设置 -mmacosx-versi
我正在使用 GCC 在我的 Mac (OsX) 上使用 CMake (3.6.2) 编译 LLVM (3.9.0),但不知何故我在遵循 GCC 配置时遇到以下错误 Configured with: -
我是一名优秀的程序员,十分优秀!