Компилятор хочет искаженное имя из OpenCL.lib

0

Я пытаюсь скомпилировать код Intel OpenCL. Программа проста:

#include <CL/cl.h>

int main(int argc, char** argv)
{
    cl_int error = CL_SUCCESS;

   // Get platform number.
    cl_uint platformNumber = 0;

    error = clGetPlatformIDs(0, NULL, &platformNumber);
    return 0;
}

Но не найдено _clGetPlatformIDs@12. Я добавляю OpenCL.lib и путь. В OpenCL.lib есть clGetPlatformIDs, а не _clGetPlatformIDs@12.

Как я могу отключить управление именами?

  • 0
    Файл cl.h уже включает использование extern "C" , но вы его не получаете. Можете ли вы опубликовать версии ОС и компилятора вместе с командной строкой компиляции?
  • 0
    Свойства-> C / C ++ -> Advanced-> Compile As и переименование Main.cpp в Main.c ничего не делают
Показать ещё 4 комментария
Теги:
opencl
name-mangling

3 ответа

1

Я думаю, вы связываетесь с неправильной версией библиотеки. Должна быть версия x86 (Win32) и версия x64. По умолчанию VS2013 создает приложения x86 (Win32) C++. Либо меняйте библиотеки, либо измените свой проект на x64. См. Http://msdn.microsoft.com/en-us/library/9yb4317s.aspx.

1

Не то, чтобы я узнал о библиотеке opencl, но просто написал

extern "C" {
    #include <CL/cl.h>
}

возможно, поможет решить конфликтные ситуации с C/C++.

  • 0
    В cl.h есть #ifdef __cplusplus extern "C" {#endif
  • 1
    @Borneq Ваш точный контекст до сих пор неясен. Уточните свой вопрос, пожалуйста.
Показать ещё 1 комментарий
1

Задайте соглашение о cdecl по умолчанию для cdecl. В Visual Studio это находится в свойствах проекта. Свойства конфигурации → C/C++ → Расширенная панель.

  • 0
    cdecl ставит подчеркивание перед именами. В любом случае заголовочный файл cl.h объявляет методы как __stdcall.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню