GCC: компиляция узла OpenCL в Windows

Я просто хотел попробовать использовать OpenCL под Windows.

Аннотация : У меня возникла ошибка « undefined reference to » при попытке скомпилировать (с использованием команды gcc my.o -o my.exe -L "C:\Program Files (x86)\AMD APP\lib\x86_64" -l OpenCL ).


Мой код

 #include  #include  int main(void) { cl_platform_id platform; int err; err = clGetPlatformIDs(1, &platform, NULL); if(err < 0) { perror("There's No Platform!"); exit(1); } /* Some more code... */ system("PAUSE"); } 

Makefile

 all: addition addition: gcc -c -I "C:\Program Files (x86)\AMD APP\include" my.c -o my.o gcc my.o -o my.exe -L "C:\Program Files (x86)\AMD APP\lib\x86_64" -l OpenCL 

Используемые программы

  • gcc MinGW
  • nmake Visual Studio
  • AMD OpenCL ™ APP SDK (где я взял библиотеку OpenCL и файл CL.h )

Структура папок APP SDK

 %>tree /F "C:\Program Files (x86)\AMD APP\lib\x86_64" Auflistung der Ordnerpfade Volumeseriennummer : D2DC-D765 C:\PROGRAM FILES (X86)\AMD APP\LIB\X86_64 libOpenCL.a OpenCL.lib OpenVideo64.lib Es sind keine Unterordner vorhanden %>tree /F "C:\Program Files (x86)\AMD APP\include" Auflistung der Ordnerpfade Volumeseriennummer : D2DC-D765 C:\PROGRAM FILES (X86)\AMD APP\INCLUDE ├───CAL │ cal.h │ calcl.h │ cal_ext.h │ cal_ext_counter.h │ cal_ext_d3d10.h │ cal_ext_d3d9.h │ ├───CL │ cl.h │ cl.hpp │ cl_d3d10.h │ cl_ext.h │ cl_gl.h │ cl_gl_ext.h │ cl_platform.h │ opencl.h │ └───OpenVideo OpenVideo.h OVDecode.h OVDecodeTypes.h OVEncode.h OVEncodeTypes.h 

Сообщение об ошибке

  gcc addition.o -o addition.exe -L "C:\Program Files (x86)\AMD APP\lib\x86_64" -l OpenCL addition.o:addition.c:(.text+0x2d): undefined reference to `clGetPlatformIDs@12' addition.o:addition.c:(.text+0x83): undefined reference to `clGetDeviceIDs@24' addition.o:addition.c:(.text+0xc2): undefined reference to `clGetDeviceIDs@24' collect2: ld returned 1 exit status NMAKE : fatal error U1077: "C:\prog-x86\MinGW\bin\gcc.EXE": Rückgabe-Code "0x1" Stop. 

Мои вопросы

Мои вопросы просты:

  • Почему мой код не компилируется, как ожидается?
  • Что я могу сделать, чтобы избавиться от этой проблемы?

Благодарю.


UPDATE: сообщение об ошибке после удаления пробелов, как описано в ответе @codaddict.

(Makefile)

 all: addition addition: gcc -c -I "C:\prog-x86\AMD-APP\include" addition.c -o addition.o gcc addition.o -o addition.exe -LC:\prog-x86\AMD-APP\lib\x86_64 -lOpenCL 

(Shelldata)

 %>nmake Microsoft (R) Program Maintenance Utility, Version 11.00.50727.1 Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten. gcc -c -I "C:\Program Files (x86)\AMD APP\include" addition.c -o addition.o addition.c: In function 'main': addition.c:14:9: warning: incompatible implicit declaration of built-in function 'exit' [enabled by d efault] addition.c:23:9: warning: incompatible implicit declaration of built-in function 'exit' [enabled by d efault] gcc addition.o -o addition.exe -LC:\prog-x86\AMD-APP\lib\x86_64 -lOpenCL addition.o:addition.c:(.text+0x2d): undefined reference to `clGetPlatformIDs@12' addition.o:addition.c:(.text+0x83): undefined reference to `clGetDeviceIDs@24' addition.o:addition.c:(.text+0xc2): undefined reference to `clGetDeviceIDs@24' collect2: ld returned 1 exit status NMAKE : fatal error U1077: "C:\prog-x86\MinGW\bin\gcc.EXE": Rückgabe-Code "0x1" Stop. %> 

В стандартном дистрибутиве MinGW используются только инструменты для создания приложений x86. Вы не можете подключиться к x64-версии библиотеки OpenCL. Таким образом, вы либо должны использовать MinGW-w64, либо использовать версию x86 (измените путь библиотеки к подпапке x86 в APP SDK).

Попробуйте изменить

 -l OpenCL 

в

 -lOpenCL 

в строке компиляции.

Параметр -l gcc ожидает имя библиотеки (без префикса lib) рядом с ней без какого-либо пробела. Помните, как использовать -lm в школе для ссылки на libm ?