开发者

[C]undefined reference while compiling openCL program

开发者 https://www.devze.com 2023-03-13 12:17 出处:网络
I\'m trying to compile something to try out openCl, but i\'m having a few problems.. Here the code prova.c

I'm trying to compile something to try out openCl, but i'm having a few problems..

Here the code

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;
}

I'm compiling on win 7 64 with mingw32. The opencl headers are in the include directory of mingw while utils.h(inside the directory Utils inside the directory of prova.c) defines clErrorString(that simply convert the error into a more human readable string).

To compile i use

gcc -L\Utils prova.c

But i always get

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'

I'm not so good with compilers, so i image i'm missing something, but i really don't know what..

EDIT: Sincerely, i tried every command come to my mind. using -L to include directories, -l to link to files, using ar..

This is the last "script" i tried

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

No errors, th开发者_开发知识库e only warning is max_platform is unused. Then i find util.o and libutil.a(size 5kb) in Utils and prova.o(size 1kb). If i try to run prova.o, it says that the file version is not compatible with the current windows version, check the system version (x86 or x64) and contact the software distributor


Try something like this:

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

In general:

  • Compile single source files with -c:
    gcc -c myfile.c -o myfile.o.
    This creates object files.

  • Link all the object files to an executable (or shared library):
    gcc -o prog.exe myfile.o yourstuff.o sha257.o

  • You can combine object files into a static library, which you treat just like a single object file when linking:
    ar rcs libcoolstuff.a yourstuff.o sha257.o
    gcc -o prog.exe myfile.o libcoolstuff.a
    Alternatively:
    gcc -o prog.exe myfile.o -lcoolstuff
    The latter syntax (automatic library linking with -l) requires either libcoolstuff.a or libcoolstuff.so to be findable in the library path (which you can amend with -L at linktime).
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号