我正在尝试隔离并重现我在this question中描述的行为。为此,我编写了一些使用Core Graphics Events的代码片段:
#include <iostream>
#include <CoreGraphics/CGEventSource.h>
#include <CoreGraphics/CGEvent.h>
int main()
{
CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
if(src)
{
CGEventRef event = CGEventCreate(src);
if(event)
{
CGPoint pt = CGEventGetLocation(event);
std::cout << "X = " << pt.x << ", Y = " << pt.y << std::endl;
}
else
{
std::cout << "Unable to create the event" << std::endl;
}
}
else
{
std::cout << "Unable to create the source" << std::endl;
}
return 0;
}
我用clang ++编译它:
clang++ -arch i386 -framework CoreGraphics main.cpp -o main
当我运行它时,没有在Mojave上获得例外结果:该应用程序运行没有任何问题,但我除外Mac OS,显示了一个弹出窗口,要求进行一些辅助功能设置。
这就是为什么我有一个假设:二进制文件和捆绑的应用程序之间的行为不同。这是我的问题:如何使用clang编译此代码片段以获取捆绑应用程序?我尝试失败:
clang++ -bundle -arch i386 -framework CoreGraphics main.cpp -o main.app
我应该使用哪个选项?
以下是有关我的系统的一些信息:
$ clang++ --version
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
我在OS X El Capitan(10.11.6)上进行编译,并在Mojave(10.14.4)上运行我的应用。