7

在 OSX 的开发环境中有框架的概念。框架是一种包含头文件、共享库和其他有用东西的包。可以将框架传递给编译器,以便编译器在搜索路径中包含其头文件,并使用其共享库来链接程序。

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

那么,这个超级有用的功能是否适用于 Linux?gcc 或 clang 能识别-frameworkLinux 上的选项吗?当我在 Linux 上键入这个选项时,编译器似乎无法识别它,但这可能是因为我需要在它之前设置 frameworks 目录路径。有什么特别的技巧可以让它在 Linux 上运行吗?或者这在这个平台上绝对不可能?

4

3 回答 3

4

不,它不适用于 Linux。框架是 (OS X) Mach-O ABI的一个特性。理论上,您可以编写一个内核模块来支持 Mach-O,并提供链接器/加载器用户空间工具。这将是很多工作

于 2013-03-09T13:43:46.380 回答
3

我在 FreeBSD 上使用它,所以是的框架应该可以在 Linux 上运行。框架只是头文件、资源和 lib 文件的自包含文件夹。该库可以具有 ELF 格式,并且您不需要 mach-o 支持。

所以这取决于你想做什么。

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

  • 如果您想构建自己的框架,这也是可能的。在 GNUStep 中,您会找到一些帮助文件。

于 2013-11-06T09:42:55.810 回答
-1

这段引文展示了如何在不同平台上编译 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

于 2016-11-09T16:46:44.513 回答