Tag: macos

Swift:如何调用从dylib加载的C函数

有没有办法调用从Swift的dylib加载的C函数? 这是我的dylib文件: cppdemofile.cpp #include “cppdemofile.h” int add(int a, int b) { return a + b; } cppdemofile.h #ifndef __CppDemoLibrary__cppdemofile__ #define __CppDemoLibrary__cppdemofile__ #pragma GCC visibility push(default) extern “C” int add(int a, int b); #pragma GCC visibility pop #endif 编译成dylib并检查: nm -gU libCppDemoLibrary.dylib 0000000000000f80 T _add …将libCppDemoLibrary.dylib复制到~/lib … Swift程序 : @IBAction func buttonClick(sender: NSButton) { let handle […]

OSX FSEventStreamEventFlags无法正常工作

我正在观看文件系统事件的目录。 一切似乎工作正常,但有一个例外。 当我第一次创建文件时,它会吐出它已创建的文件。 然后我可以删除它,它说它已被删除。 当我再次创建同一个文件时,我同时获得了一个创建和删除的标志。 我很明显误解了在调用回调时如何设置标志。 这里发生了什么? // // main.c // GoFSEvents // // Created by Kyle Cook on 8/22/13. // Copyright (c) 2013 Kyle Cook. All rights reserved. // #include #include #include void eventCallback(FSEventStreamRef stream, void* callbackInfo, size_t numEvents, void* paths, const FSEventStreamEventFlags eventFlags[], const FSEventStreamEventId eventIds[]) { char **pathsList = paths; for(int i […]

如何在Mac上检测耳机插孔中的某些东西?

有没有办法检测是否有东西插入Mac的耳机插孔使用c或objective-c ? 谢谢

为什么在Mac OS X上不推荐使用sem_init(),sem_getvalue(),sem_destroy() – 以及取代它们的原因是什么?

当我使用POSIX sem_init()函数编译程序时,我得到一个编译警告(错误,因为我通常使用-Werror ),当我使用GCC 4.9在Mac OS X 10.10.1(Yosemite)上编译时,该函数已被弃用。 1或来自XCode 6.1.1的Clang( Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn) )的版本。 快速浏览一下/usr/include/sys/semaphore.h就会发现该函数在声明后确实有一个__deprecated标记, sem_getvalue()和sem_destroy() 。 问题: 鉴于POSIX规范中没有任何弃用的暗示,为什么在Mac OS X上将这三个函数单独列为已弃用? 鉴于它们已被弃用,替代品是什么,为什么替代品更受欢迎? ( 我确实首先检查了Ask Different ;没有问题标记c ,也没有问题询问已弃用的系统调用 – 只有程序。 )

valgrind mac os mem泄漏

今天我在我的Mac os x 10.6上安装了valgrind并尝试测试它。 事实certificate,系统中存在奇怪的内存泄漏。 我所做的只是创建简单的c文件,获取一些堆内存并立即释放它。 当我跑valgrind时,它表现出类似的东西 Realfrees-MacBook-Pro:C Realfree$ valgrind –tool=memcheck –leak-check=yes –show-reachable=yes ./a.out ==2621== Memcheck, a memory error detector ==2621== Copyright (C) 2002-2010, and GNU GPL’d, by Julian Seward et al. ==2621== Using Valgrind-3.6.0 and LibVEX; rerun with -h for copyright info ==2621== Command: ./a.out ==2621== –2621– ./a.out: –2621– dSYM directory is missing; consider […]

从OS X上的C中的dlopen()ed动态库访问主程序全局变量

我正在维护一个具有类似插件function的小应用程序 ,它通过运行时加载的动态模块实现。 具体来说,因为它是一个Gtk +应用程序,我正在使用gmodule,但问题也适用于基于dlfcn.h / dlopen()的动态库加载。 我的主程序有一个包含一些全局信息的全局结构变量。 我希望这些信息可用于动态加载的插件中定义的函数。 在Linux上,我可以直接引用这个全局变量 – 这很好用,我猜测gcc或链接器负责将全局变量从主程序导出到动态库。 问题是,这在Mac OS X上不起作用。有没有办法在OS X上执行此操作? 如果没有,是否有更多的“最佳实践”方法将全局信息公开给动态加载的库?

如何模拟os x上的低级按键?

我试图以编程方式生成键盘keydown和keyup事件。 我目前正在使用CGPostKeyboardEvent来执行此操作,但我正在寻找一种在较低级别执行此操作的方法。 我看过DDHidLib,但无法找到创建假事件的方法。 有人可以帮忙吗? 更新 :感谢weichsel的建议,我现在正在创建一个关键事件,其中包含以下内容: CGEventRef e = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)52, true); CGEventPost(kCGSessionEventTap, e); CFRelease(e); 我在这里找到了 。 但是 ,我的问题仍然存在,所以我会详细说明一下。 我希望发送按键的应用程序(第三方)实现DDHidLib的键捕获function: – (void) ddhidKeyboard: (DDHidKeyboard *) keyboard keyDown: (unsigned) usageId; 并且永远不会使用当前方法调用它。 我的猜测是,使用CGEventCreateKeyboardEvent模拟的键值太高,无法通过ddhidKeyboard捕获:keyDown。 所以我要做的是在足够低的级别创建keydown事件,以便ddhidKeyboard:keyDown识别它。

如何在Mac OS X上增加C中“最大打开文件”的限制

Mac OS X上最大打开文件的默认限制为256(ulimit -n),我的应用程序需要大约400个文件处理程序。 我尝试用setrlimit()更改限制,但即使函数正确执行,我仍然限制为256。 这是我使用的测试程序: #include #include main() { struct rlimit rlp; FILE *fp[10000]; int i; getrlimit(RLIMIT_NOFILE, &rlp); printf(“before %d %d\n”, rlp.rlim_cur, rlp.rlim_max); rlp.rlim_cur = 10000; setrlimit(RLIMIT_NOFILE, &rlp); getrlimit(RLIMIT_NOFILE, &rlp); printf(“after %d %d\n”, rlp.rlim_cur, rlp.rlim_max); for(i=0;i<10000;i++) { fp[i] = fopen("a.out", "r"); if(fp[i]==0) { printf("failed after %d\n", i); break; } } } 输出是: before 256 […]

适用于Mac OS X的SetWindowsHookEx?

Windows钩子允许您在其他进程中查找,有时会改变其行为。 Mac OS X有这样的东西吗? 谢谢!

Mac OS X的静态库链接问题:找不到架构x86_64的符号

我正在尝试生成一个静态库并将其与执行二进制文件链接。 这是一个库函数: #include int hello() { return 10; } 使用这些命令,我​​可以得到一个静态库。 gcc -c io.c ar -crv libio.a io.o 使用lip -info ,我检查它是x86_64架构。 ar> lipo -info libio.a input file libio.a is not a fat file Non-fat file: libio.a is architecture: x86_64 这是使用库的主要function。 #include extern int hello(); int main(int argc, char *argv[]) { printf(“%d”, hello()); } 但是,当我将对象与静态库链接时,我有错误。 gcc main.c […]