2013-03-09 67 views
5

在OSX的开发环境中,有框架的概念。框架是一种包含标题,共享库和其他有用内容的包。可以将一个框架传递给编译器,以便编译器在搜索路径中包含它的标题,并使用它的共享库来将程序与它们相链接。GCC/Clang的框架选项可以在Linux上运行吗?

因此,例如,如果-framework FrameworkName传递给OSX上的gcc或clang,编译器将查找/System/Library/Frameworks目录以查找FrameworkName.framework目录。如果找到,编译器会包含它的头文件并将程序与其共享库链接起来。

那么,这个超级有用的功能在Linux上工作吗? gcc或clang是否认可Linux上的-framework选项?当我在Linux上输入这个选项时,编译器似乎不认识它,但也许这是因为我需要在它之前设置框架目录路径。有什么特别的技巧可以使它在Linux上工作吗?或者这在这个平台上绝对不可能?

+1

有一些旧的邮件列表闲聊时,这是第一次添加;它仍然是OSX专用的,直到人们可以就Linux下的实际意义达成某种协议。 – Joe 2013-03-09 13:45:51

回答

4

不,它不适用于Linux。框架是(OS X)Mach-O ABI的一项功能。从理论上讲,你可以编写Mach-O支持的内核模块,并提供链接器/加载器用户空间工具。这将是a lot of work

3

我在FreeBSD上使用它,所以是的框架应该可以在Linux上使用。一个框架只是一个包含头文件,资源和lib文件的自包含文件夹。这个lib可以有ELF格式,你不需要马赫支持。

所以它取决于你想要做什么。

  • 如果你想使用Cocoa框架,那么你很可能不会在Linux上。但是,如果您在Foundation框架中查找对象,则可以通过安装GNUStep来获得它。

  • 如果你想建立你自己的框架也是可能的。在GNUStep中,你会发现一些辅助makefile。

+2

请问你怎么样?我没有设法找到任何关于如何创建一个框架来使用clang或gcc(通过命令行)的任何参考。 – paulotorrens 2015-05-31 08:01:08

0

这句话说明了如何编写在不同平台上的OpenCL代码,一个叫user_buffer程序:

“在OSX,你会通过你的终端上运行以下命令编译程序:

gcc -std=c99 -Wall -DUNIX -g -DDEBUG -DAPPLE -arch i386 -o user_buffer user_buffer.c \ 
-framework OpenCL 

在Ubuntu Linux操作系统的12.04英特尔OpenCL的SDK,该命令将如下:

gcc -std=c99 -Wall -DUNIX -g -DDEBUG -m64 -o user_buffer user_buffer.c -I . -I /usr/include \ 
-L/usr/lib64/OpenCL/vendors/intel -lintelocl -ltbb -ltbbmalloc -lcl_logger -ltask_executor 

在带有AMD APP SDK v2的Ubuntu Linux 12.04上。8,该命令将如下:

gcc -std=c99 -Wall -DUNIX -g -DDEBUG –m64 -o user_buffer user_buffer.c \ 
-I. –I/opt/AMDAPP/include –L/opt/AMDAPP/lib/x86_64 –lOpenCL 

https://www.academia.edu/22200475OpenCL_Parallel_Programming_Development_Cookbook

为NVIDIA的OpenCL SDK在Linux上,一个名为程序 'VectorAdd函数':

g++ -I ~/NVIDIA_GPU_Computing_SDK/OpenCL/common/inc/ -lOpenCL vectoradd.cpp –o vectoradd 

在NVIDIA的OpenCL获取入门指南,可从 https://uloz.to/!nY4NzLAG/nvidia-opencl-examples-cuda-4-2-9-sdk-zip

相关问题