2013-03-09 35 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

相關問題