c - GCC:在 Windows 上编译 OpenCL 主机

标签 c gcc compilation mingw opencl

我只是想尝试在 Windows 下使用 OpenCL。

摘要:当我尝试编译(使用命令 undefined reference to )。


我的代码

#include <CL/cl.h>
#include <stdio.h>

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

生成文件

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

使用过的程序

  • MinGW 的 gcc my.o -o my.exe -L "C:\Program Files (x86)\AMD APP\lib\x86_64" -l OpenCL
  • Visual Studio 的 gcc
  • AMD 的 OpenCL™ APP SDK(这是我从中获取 OpenCL 库和 nmake 文件的地方)

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: The error message after dropping the spaces like described in @codaddict 's answer.

(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 应用程序的工具。您不能链接 OpenCL 库的 x64 版本。所以你要么必须使用 MinGW-w64或使用x86版本(将库路径更改为APP SDK的x86子文件夹)。

关于c - GCC:在 Windows 上编译 OpenCL 主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12437776/

相关文章:

c - 如何在 C 语言中按 ASCII 顺序对命令行参数进行排序

c - 使用 3D cuda Memory 时,传递关联的 cudaPitchedPtr 还是仅传递 cudaPitchedPtr 结构中的原始指针更好?

c - 对包含零件列表的文件进行 fseek 和 fread

c - 打印所有全局变量/局部变量?

c - 了解某些 ELF 文件结构

java - 在java中,动态分配

c - 如果 char 被签名, "char foo = 255"是未定义的行为吗?

c - 如何使用 .exe 文件传送 .dll 文件

code-generation - Java JVM/.NET CLR 的代码生成

compiler-construction - 实现 8051 的函数调用