Как скомпилировать простую программу OpenCL в Android? - PullRequest
0 голосов
/ 21 мая 2018

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

Я хочу "запустить" / выполнить программу, содержащую функции OpenCL, на моем SamsungGalaxy S7 (Exynos SoC).Поддержка OpenCL не должна быть проблемой, потому что: 1) это хорошо поддерживаемый флагманский телефон от известного производителя 2) libOpenCL.so присутствует в /system/vendor/lib/libOpenCL.so 3) OpenCL-Z сообщает о допустимой платформе и устройстве (только для графического процессора)по какой-то причине)

Вещи, которые я пробовал: рутировал телефон.Установлен cppdroid.Попытка скомпилировать простую программу, которая содержит ссылки на стандартные функции OpenCL, такие как clGetPlatformIDs().

. Заголовочные файлы должны быть включены где-то, но я не мог на всю жизнь найти, где их разместить (используя тот же путьгде cppdroid хранит стандартные заголовочные файлы не работали), поэтому я вручную включил заголовки в сам файл .c, делая его едва редактируемым на самом телефоне.

Насколько я понимаю, мне следует связать библиотеку (libOpenCL.so) к выходу gcc во время фазы соединения.Кажется, есть возможность сделать это в cppdroid, в разделе «Настройки», «Настройки проекта», «Параметры связи», поэтому я добавляю:

-L/system/vendor/lib/libOpenCL.so

в это поле.Однако компиляция все равно не удалась, и я получаю «неопределенные ссылки на clGetPlatformIDs ()», как если бы я вообще не включал библиотеку.

После поиска решения в сети, возможное решение (см. Ниже) оказалосьбесполезно: -Wl, - весь архив -L / system / vendor / lib / libOpenCL.so

Я думал, что получу gcc самостоятельно, так как это компилятор, используемый cppdroid, и попытка скомпилироватьсюда.Выяснилось, что он должен быть устаревшим и заменен на «лязг».Но в cppdroid есть gcc, поэтому я перешел в папку, содержащую исполняемый файл (я полагаю, что это исполняемый файл, здесь нет расширений, и я работаю в Windows), который выглядит так:

/data/data/name.antonsmirnov.android.cppdroid/sdk/gcc#4.8#2/bin

и попытался «выполнить» gcc-4.8 (который выглядит как исполняемый компилятор) из termux (эмулятор терминала для Android).К моему большому удивлению, я получил сообщение об ошибке:

sush: gcc-4.8: not found

Несмотря на то, что ls -1 отображает файл нормально!

Я пробовал другие разные вещи, которые не работали, но вот мой вопрос:

Как мне скомпилировать простую программу OpenCL, которую я написал на C, чтобы выполнить ее на моем мобильном устройстве Android?

Почему яполучить сообщение об ошибке

sush: gcc-4.8: not found

?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

First -L предоставляет каталог для поиска библиотек для ссылки, вы должны использовать -L/system/vendor/lib, вы можете использовать -l для ссылки на библиотеку в вашем случае -lOpenCL без префикса lib.

0 голосов
/ 21 мая 2018

Насколько я понимаю, я должен связать библиотеку (libOpenCL.so) с выводом gcc на этапе компоновки.Кажется, есть возможность сделать это в cppdroid, в разделе «Настройки», «Настройки проекта», «Параметры связи», поэтому я добавляю:

-L/system/vendor/lib/libOpenCL.so

в это поле.Однако компиляция все равно не удалась, и я получаю «неопределенные ссылки на clGetPlatformIDs ()», как будто я вообще не включил библиотеку.

Вам нужно добавить -lOpenCL и -L/system/vendor/lib кфлаги компоновщика.Второй параметр может не потребоваться, поскольку этот каталог уже должен находиться в пути поиска по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...