我正在尝试编译一些东西来试用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 'clGetPlatformIDs@12'
C:\[stuff]\ccEjYQbj.o:prova.c:(.text+0x8d): undefined reference to 'clGetPlatformIDs@12'
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(大小为5kb)。如果我尝试运行prova.o,它表示文件版本与当前的Windows版本不兼容,请检查系统版本(x86或x64)并联系软件分销商
答案 0 :(得分:1)
尝试这样的事情:
set PATH=%PATH%;C:\Python26;C:\MinGW\bin;C:\MinGW\lib
cd Utils
gcc -W -Wall -c util.c -o util.o
ar rcs libutil.a util.o
cd..
gcc -W -Wall -c prova.c -o prova.o
gcc -o prova.exe prova.o Utils\libutil.a
# Using a standard library
gcc -o prog.exe myprog.o -lzip # e.g. /usr/lib/libz.a
# Using a nonstandard library
gcc -o prog.exe myprog.o -lfoo -L/tmp/libfoo # uses /tmp/libfoo/libfoo.a
gcc -o prog.exe myprog.o /tmp/libfoo/libfoo.a # same effect
一般来说:
-c
编译单个源文件:gcc -c myfile.c -o myfile.o
。
gcc -o prog.exe myfile.o yourstuff.o sha257.o
ar rcs libcoolstuff.a yourstuff.o sha257.o
gcc -o prog.exe myfile.o libcoolstuff.a
gcc -o prog.exe myfile.o -lcoolstuff
-l
链接)要求libcoolstuff.a
或libcoolstuff.so
可以找到库路径(您可以在链接时使用-L
进行修改)。