我試圖編譯一些嘗試了OpenCL的,但我有一些問題..[C]未定義的引用在編譯的OpenCL程序
下面的代碼
prova.c
#include <stdio.h>
#include <CL/opencl.h>
#include "Utils\util.h"
#include <malloc.h>
int main(){
cl_int error = 0; // Used to handle error codes
cl_int max_platforms = 1; // The maximum number of platforms
cl_uint adviable_platforms = 0; //The adviable number of platforms
cl_platform_id* platform;
error = clGetPlatformIDs(0, NULL, &adviable_platforms);
if(adviable_platforms == 0)
{
printf("No adviable platforms.\n");
return -1;
} else {
platform = (cl_platform_id*)malloc(adviable_platforms * sizeof(cl_platform_id));
}
error = clGetPlatformIDs(adviable_platforms, platform, NULL);
printf("clGetPlatformIDs: %s\n", clErrorString(error));
return 0;
}
我正在用mingw32編譯win 7 64。 opencl頭文件位於mingw的include目錄中,utils.h(位於prova.c目錄內的Utils目錄內)定義了clErrorString(即將錯誤簡單地轉換爲更易讀的字符串)。
編譯我使用
gcc -L\Utils prova.c
但我總是得到
C:\[stuff]\ccEjYQbj.o:prova.c:(.text+0x42): undefined reference to '[email protected]'
C:\[stuff]\ccEjYQbj.o:prova.c:(.text+0x8d): undefined reference to '[email protected]'
C:\[stuff]\ccEjYQbj.o:prova.c:(.text+0x9e): undefined reference to 'clErrorString'
我不是這樣的編譯器好,所以我像我想的東西,但我真的不知道什麼..
編輯: 真誠地,我試過每一個命令來到我的腦海。使用-L包括目錄,-l鏈接到文件,使用AR ..
這是最後的 「腳本」 我試圖
set PATH=%PATH%;C:\Python26;C:\MinGW\bin;C:\MinGW\lib
cd Utils
gcc -c util.c -l"C:\Program Files (x86)\AMD APP\lib\x86_64\libOpenCL.a" -o util.o
ar rcs libutil.a util.o
cd..
pause
gcc -c prova.c -l"Utils\libutil.a" -o prova.exe
pause
EDIT2:
@echo off
set PATH=%PATH%;C:\Python26;C:\MinGW\bin;C:\MinGW\lib
cd Utils
gcc -Wall -c util.c -L"C:\Program Files (x86)\AMD APP\lib\x86_64\" -o util.o
ar rcs libutil.a util.o
cd..
pause
gcc -Wall -c prova.c -L"C:\Program Files (x86)\AMD APP\lib\x86_64\" -l"Utils\libutil.a" -o prova.exe
pause
沒有錯誤,唯一的警告是max_platform未被使用。然後我在Utils和prova.o(大小爲1kb)中找到util.o和libutil.a(size 5kb)。如果我嘗試運行prova.o,它說,該文件版本與當前的Windows版本兼容,檢查系統版本(x86或x64),並聯系軟件分銷商
這是一個鏈接器錯誤,而不是編譯器錯誤。您需要鏈接OpenCL庫。 – 2011-06-15 22:24:32
查看mingw「lib」目錄,看看是否可以找到某種CL庫(可能是名爲「libcl * .a」的東西)。然後通過「-l」將名稱(減去「lib」和「.a」)傳遞給編譯器。 –
2011-06-16 01:00:31
opencl.h(和所有其他頭文件)位於C:\ Mingw \ include \ CL.I中,在lib文件夾或項目文件夾中的名稱中找不到與opencl或cl相關的內容(opencl相關的)。我知道這是一個noob問題,但我如何編譯頭文件?我一直認爲頭文件不會被編譯,但只有.c/.cpp文件..Ps:我已經嘗試編譯添加-lpath_to_include_folder,但得到了相同的錯誤.PPS:使用cmake腳本爲我從一個小程序獲得它編譯的網絡很好(我需要刪除cl.h的相對路徑,因爲我的標準目錄),所以我的系統中有一切。 – 2011-06-16 12:55:53