在OSX的开发环境中,有框架的概念。框架是一种包含头,共享库和其他有用东西的包。可以将框架传递给编译器,以便编译器在搜索路径中包含其标头,并使用其共享库将程序链接到它们。
因此,例如,如果在OSX上将-framework FrameworkName
传递给gcc或clang,编译器会查找/System/Library/Frameworks
目录以查找FrameworkName.framework
目录。如果找到,编译器将包含其头文件并将程序与其共享库链接。
那么,这个超级有用的功能是否适用于Linux? gcc或clang是否识别Linux上的-framework
选项?当我在Linux上键入此选项时,编译器似乎无法识别它,但这可能是因为我需要在它之前设置框架目录路径。是否有任何特殊技巧可以使它在Linux上运行?或者这在这个平台上绝对不可能?
答案 0 :(得分:4)
不,它不适用于Linux。框架是(OS X)Mach-O ABI的一个特征。理论上,您可以为Mach-O支持编写内核模块,并提供链接器/加载器用户空间工具。它将是a lot of work。
答案 1 :(得分:3)
我在FreeBSD上使用它,所以是的框架应该适用于Linux。框架只是头文件,资源和lib文件的自包含文件夹。 lib可以有ELF格式,你不需要马赫支持。
所以这取决于你想做什么。
如果您希望使用Cocoa框架,那么您很可能不会在Linux上使用它。但是如果你在Foundation框架中寻找对象,你可以通过安装GNUStep来实现它。
如果您希望构建自己的框架,也可以。在GNUStep中,你会找到一些帮助makefile。
答案 2 :(得分:0)
此引言显示了如何在不同平台上编译OpenCL代码,对于名为user_buffer
的程序:
“在OSX上,您可以通过在终端上运行以下命令来编译程序:
gcc -std=c99 -Wall -DUNIX -g -DDEBUG -DAPPLE -arch i386 -o user_buffer user_buffer.c \
-framework OpenCL
在使用Intel OpenCL SDK的Ubuntu Linux 12.04上,命令如下:
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.8的Ubuntu Linux 12.04上,命令如下:
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
对于Linux上的Nvidia OpenCL SDK,对于名为“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