2015-12-21 3 views
0

У меня серьезные проблемы с выполнением первых шагов в Opencl, прежде всего потому, что мой компилятор либо отказывается признать существование соответствующих библиотек. Я загрузил последнюю версию AMD SDK с their website и пошел с полной установкой. Я хочу учиться через this blog, поэтому большая часть моей информации получена оттуда.Неисправность, связанная с AMD SDK opencl

Во-первых, я проверил переменную системного пути и включил 64-битную папку bin amd api.

Я начал с компиляции с использованием файла make с стандартным вариантом -lOpenCl, но он просто сказал мне, что он не смог найти -lOpenCl или CL \ cl.hpp. Поэтому я добавил -I %AMDAPPSDKROOT%\include, который исправил половину моей проблемы, но все же (три часа и подсчет) компилятор жалуется на неопределенные ссылки, отказываясь распознавать любую из соответствующих библиотек.

g++ -std=c++1y -g -o .\bin\test.exe .\quicktest.cpp -I .\Libraries -I .\Scource -I "%AMDAPPSDKROOT%\include" -L "%AMDAPPSDKROOT%\bin\x86_64" -L "%AMDAPPSDKROOT%\lib\x86_64" -LlibOpenCl.a - это команда, которую я компилирую прямо сейчас, и она побеждает все проблемы, но неопределенные ссылки на такие функции, как clGetPlatform и clReleaseCommandQueue. Я использую тот же самый код, что и первый пример в OpenCl blog, за исключением того, что я также включил vector.

Я пробовал загрузку различных комбинаций и предложений из Интернета, но до сих пор ничего не работало. Есть что-то, чего я не вижу/не понимаю? Я бы очень хотел продвинуться в своем учебе и глубоко признателен за любую помощь.

Если честно, я не знаю, какая информация была бы полезной, но если это помогает, я запускаю 64-битный компьютер с Windows 7 с GeForce GT 635, и у меня установлены как CUDA, так и AMD SDK.

+0

У меня может быть решение, я собираюсь сделать перерыв, хотя – user4578093

ответ

3

глядя на то, как вы компилируете, кажется, что -LlibOpenCl.a неправ. -L используется для библиотек, а -l используется для отдельных библиотек. Чтобы использовать -l, вам нужно удалить библиотеку перед именем библиотеки и удалить после нее точку. В вашем случае это должно быть -lOpenCl, как вы сказали в начале.

Является ли libOpenCl в одном из этих двух каталогов? : % AMDAPPSDKROOT% \ Bin \ x86_64 % AMDAPPSDKROOT% \ Lib \ x86_64

Я полагаю, что первый один для бинарных файлов, и он второй один для библиотек, так что первый один должен быть бесполезным. Во время связывания вы получаете неопределенные ссылки, поскольку вы все еще не связываете библиотеку.

+0

Несколько разных источников сказали, что это был путь, но способ изменения имени файла кажется для меня колдовством, поэтому я выбрал просто написать полное имя файла для моей компиляции. Спасибо, что заявили об этом, хотя, когда я искал ответ, я видел что-то подобное несколько раз, но никогда не было указано, что lib должен быть удален от имени, поэтому я его не заметил. – user4578093

0
g++ -std=c++1y -g -o .\bin\test.exe .\quicktest.cpp -I .\Libraries 
-I .\Scource -I "%AMDAPPSDKROOT%\include" "%AMDAPPSDKROOT%\lib\x86\libOpenCl.a" 

%AMDAPPSDKROOT%\lib\x86\libOpenCl.a, указав полный путь к файлу и в том числе файл с той же семантикой, как если бы это был файл объект, который я получил мой проект для компиляции, я также использовал 32 битную версию библиотек вместо 64 разрядной версии.

Смежные вопросы