Tag: macos

检查运行的二进制文件是32位还是64位

可以检查应用程序包的二进制进程是否在32位或64位模式下运行,如本问题所述 ,但我可以validation它只适用于GUI进程。 但是,我还需要检查没有GUI但不属于bundle的进程。 因此,在没有调用系统函数或其他可执行文件的情况下,在给定进程pid的情况下,如何测试是否有任何进程在32位或64位模式下运行?

OpenCL命令队列(CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE)无法正常工作(MacOS)

完成Fixstars的示例和源代码。 具体来说,我正在尝试第5章中的最后一点代码(两个移动平均线 – 又名Golden Cross): http://www.fixstars.com/en/opencl/book/OpenCLProgrammingBook/opencl-programming-practice/ 代码可在此处获得: http://www.fixstars.com/en/opencl/book/sample/ 我将在下面发布具体示例。 但缺点是通过设置命令队列如下: command_queue = clCreateCommandQueue(context, device_id, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &ret); 导致无效的command_queue(clError)。 因此,返回数据未得到正确处理。 IE。,它全是零。 但是,如果我设置代码只计算一个移动平均值,而没有CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE ,那么事情就可以了。 相应地,本章之前的Fixstars代码似乎都可以正常工作。 我正在开发一款配备NVIDIA芯片的全新MacBook Pro(视网膜)。 所以我想知道它是否与NVIDIA实现或其他方面有关。 无论如何,它对我来说都是一个阻碍,因为我最终试图做的是触发多个(相同的)过程,每个过程都有不同的参数,这个例子通过同时计算两个股票价格移动平均线试图做同样的事情。 代码片段如下。 我已经在其源代码中添加了调试打印输出function。 所以我在程序执行时看到以下内容: 从clGetPlatformIDs返回代码:成功! 从clGetDeviceIDs返回代码:成功! 从clCreateContext返回代码:成功! 从clCreateCommandQueue返回代码:无效的值 从clBuildProgram返回代码:成功! 从clCreateKernel返回代码(13):成功! 从clCreateKernel返回代码(26):成功! 从clEnqueueTask(13)返回代码:无效的命令队列 从clEnqueueTask(26)返回代码:无效的命令队列 结果[25]:[0](0.000000,0.000000)[0](0.000000,0.000000)[0](0.000000,0.000000)[0](0.000000,0.000000) 结果[26]:[0](0.000000,0.000000)[0](0.000000,0.000000)[0](0.000000,0.000000)[0](0.000000,0.000000) 结果[27]:[0](0.000000,0.000000)[0](0.000000,0.000000)[0](0.000000,0.000000)[0](0.000000,0.000000) 结果[28]:[0](0.000000,0.000000)[0](0.000000,0.000000)[0](0.000000,0.000000)[0](0.000000,0.000000) …其余数据也都是零。 我正在编译: gcc -O2 -c moving_average_vec4p.c gcc moving_average_vec4p.o -o moving_average_vec4p -framework opencl —-(主机代码)moving_average_vec4p.c […]

C程序占77%的时间在_platform_memmove $ VARIANT $ Haswell

我正在分析用C编写的一些数字代码(profiler是Instruments,编译器在Mac OSX 10.11.6上是clang )。 在_platform_memmove$VARIANT$Haswell花费了77.3%的运行时间。 在汇编输出中,上面的函数由DYLD-STUB$$memcpy调用。 但是,我的C代码中没有memcpy (虽然我确实有一些malloc )。 更进一步,似乎汇编命令rep负责占用这么多时间。 从这篇文章来看,似乎rep没有做任何有用的事情。 为什么编译器会插入它? memcpy来自哪里? 我也尝试用-g编译,但是后来_platform_memmove$VARIANT$Haswell几乎没有时间吞噬了。

OS X:如何在macOS上获取Desktop目录的路径?

如何将文件路径作为macOS上的字符串获取到Desktop目录。 我需要在纯C或一些C级框架中完成它。

旋转锁实现(OSSpinLock)

我刚开始研究multithreading编程和线程安全性。 我熟悉忙碌的等待,经过一些研究,我现在熟悉自旋锁背后的理论,所以我想我会看一下OSSpinLock在Mac上的实现。 它归结为以下函数(在objc-os.h中定义): static inline void ARRSpinLockLock(ARRSpinLock *l) { again: /* … Busy-waiting … */ thread_switch(THREAD_NULL, SWITCH_OPTION_DEPRESS, 1); goto again; } ( 在这里全面实施 ) 在做了一些挖掘之后,我现在已经大致了解了thread_switch的参数是什么( 这个站点是我发现它的地方)。 我对所读内容的解释是,对thread_switch的这一特定调用将切换到下一个可用线程,并将当前线程的优先级降低到1个周期的绝对最小值。 ‘最终’(在CPU时间内)此线程将再次变为活动状态并立即再次执行goto again; 重新开始忙碌等待的指令。 我的问题是,为什么这个电话实际上是必要的? 我在这里找到了另一个自旋锁的实现(对于Windows这次),它根本不包括(Windows等效的)线程切换调用。

在OS X 10.7上使用gcc的OpenSSL

我在OS X 10.7上使用TextEdit和gcc来制作小型终端程序。 我正在尝试学习如何编写OpenSSL,但我正在编写剧集(由于已弃用的问题 – 更多内容)。 我已经用Google搜索并搜索了所有内容,但我读到的所有内容都是2011年之前(当问题出现时),特定于iOS(我正在为OS X编程但尝试独立于平台)或谈论使用XCode(我没有 – 我更喜欢TextEdit)。 任何人都可以指出如何使用gcc在OS X上安装OpenSSL程序的简单,一步一步的正确方向? 为了记录,这是我采取的确切步骤: 通过macports安装OpenSSL ‘openssl version’返回“OpenSSL 1.0.1e 2013年2月11日” 我正在尝试编译此文件: http : //saju.net.in/code/misc/openssl_aes.c.txt 我已经改名为’aes.c’而我正在使用’gcc -o aes aes.c’ 我尝试了以下标志(没有结果):-lcrypto,lssl,-Wno-error = deprecated-declarations 我从gcc获得的具体输出如下: Brads-MacBook-Air:Desktop brad$ gcc -o aes aes.c -lssl -lcrypto -Wno-error=deprecated-declarations aes.c: In function ‘aes_init’: aes.c:30: warning: ‘EVP_BytesToKey’ is deprecated (declared at /usr/include/openssl/evp.h:572) aes.c:30: warning: ‘EVP_aes_256_cbc’ is […]

SDL2 OSX上的SDL_GetWindowSurface和/或SDL_CreateRenderer上的渲染器无效

所以我一直在玩SDL2以确定它是否符合我的需求。 我正在按照介绍性示例(主要来自lazyfoo)进行简单的测试。 #include #include const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; int main(int argc, char const *argv[]) { /* The window handle */ SDL_Window* window = NULL; /* The surface contained in the window */ SDL_Surface* screen_surface = NULL; /* Init SDL */ if(SDL_Init(SDL_INIT_VIDEO) format, 0x50, 0x50, 0x50)); // /* Update the […]

在Mac OS X中打开文件

我试图在Mac OS X中用C ++打开一个文本文件,但我总是遇到总线错误。 我不在乎把文件放在哪里。 我只需要阅读它。 我写的地址错了吗? 或者总线错误还有其他原因吗? FILE *dic; dic = fopen(“DICT”,”rb”); dic = fopen(“./DICT”,”rb”); dic = fopen(“~/DICT”,”rb”); dic = fopen(“~//DICT”,”rb”);

IOKit写入USB接口挂起/超时

可能有一些非常简单的东西,我没有做或被忽略但是我没有想法,因为我是IOKit的新手。 我想重新创建一些只有Windows的软件,我带有USB设备。 我在VM上安装了Snoopy,然后点击程序上的一个按钮,关闭LED,然后查看日志,希望了解发生了什么。 看起来每个按钮点击软件,就会发送2个数据包。 一个到接口,一个到端点,前6个字节是相同的。 我不知道为什么会这样。 史努比日志: 我还将设备连接到我的Ubuntu VM并运行sudo lsusb -v以在设备上收集更多信息: Bus 001 Device 009: ID 1234:1234 Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x1234 idProduct 0x1234 bcdDevice 1.00 iManufacturer 1 (error) iProduct 2 (error) iSerial 3 (error) bNumConfigurations 1 Configuration […]

在OS X上打破time.h clock()?

我疯了吗? 我在x86_64上运行它。 #include #include #include int main(int argc, char *argv[]) { printf(“Clock: %f\n”, clock() / (double)CLOCKS_PER_SEC); sleep(1); printf(“Clock: %f\n”, clock() / (double)CLOCKS_PER_SEC); sleep(1); printf(“Clock: %f\n”, clock() / (double)CLOCKS_PER_SEC); return 0; } 这打印 时钟:0.002880 时钟:0.002968 时钟:0.003019 它显然在sleep(1)线等待一秒钟,但输出显然是错误的。 如果这不起作用,是否有便携式C替代品?