GCC/Clang的-framework选项在Linux上是否可用?

10
在OSX的开发环境中,有一个框架(framework)的概念。框架是一种包,其中包含头文件、共享库和其他有用的东西。可以将框架传递给编译器,以便编译器在搜索路径中包含其头文件并使用其共享库将程序链接起来。
例如,如果在OSX上向gcc或clang传递-framework FrameworkName,则编译器会查找/System/Library/Frameworks目录以找到FrameworkName.framework目录。如果找到了,编译器会包含它的头文件,并链接程序到它的共享库。
那么,在Linux上这个超级实用的功能能否正常工作呢?gcc或clang是否认识Linux上的-framework选项?当我在Linux上键入此选项时,编译器似乎不认识它,但也许这是因为我需要在之前设置框架目录路径。有没有什么特殊的技巧可以使它在Linux上工作?还是说在这个平台上绝对不可能呢?

1
这是在最初添加的时候有些旧的邮件列表交流;在Linux下人们达成一致意见之前,它仍然只适用于OSX特定情况。 - Joe
3个回答

4
不,它不能在Linux上运行。框架是(OS X)Mach-O ABI的一个特性。理论上,你可以编写一个内核模块以支持Mach-O,并提供链接器/装载器用户空间工具。这将需要大量的工作

3
我在FreeBSD上使用它,所以是的,该框架应该可以在Linux上工作。一个框架只是一个自包含的文件夹,包括头文件、资源和库文件。该库文件可以具有ELF格式,你不需要mach-o支持。
因此,它取决于你想要做什么。
- 如果你希望使用Cocoa框架,则很可能在Linux上没有它。但如果你正在寻找Foundation框架中的对象,则可以通过安装GNUStep来拥有它。 - 如果你想构建自己的框架,也是可以的。在GNUStep中,你会找到一些辅助的makefile。

2
请问如何创建一个可用于clang或gcc(通过命令行)的框架?我找不到任何关于此的参考资料。 - paulotorrens

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

在Ubuntu Linux 12.04上安装AMD APP SDK v2.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

对于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下载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接