Я пытаюсь скомпилировать проект OpenCL в Eclipse с помощью компилятора Cygwin Gcc/G++, и я получил некоторые Неопределенные ссылки на функции OpenCL API. Я видел много потоков об этой проблеме, я пробовал предлагаемые решения, но у меня все еще есть эти ошибки.
В основном мой код просто извлекает информацию OpenCL о платформе и устройстве, которое я использую, поэтому я не даю его здесь, но могу, если вы хотите (даже если я не думаю, что это очень интересно).
Вот мой makefile:
RM := rm -rf
OpenCLEnvInfos.o: ../OpenCLEnvInfos.cpp
g++ -IINCLUDE_DIR1 -IINCLUDE_DIR2 -g3 -Wall -c ../OpenCLEnvInfos.cpp -o OpenCLEnvInfos.o
@echo ' '
OpenCL_infos.o: ../OpenCL_infos.cpp
g++ -IINCLUDE_DIR1 -IINCLUDE_DIR2 -g3 -Wall -c ../OpenCL_infos.cpp -o OpenCL_infos.o
@echo ' '
# All Target
all: OpenCLEnvInfos.exe
# Tool invocations
OpenCLEnvInfos.exe: OpenCLEnvInfos.o OpenCL_infos.o
g++ -o OpenCLEnvInfos.exe OpenCLEnvInfos.o OpenCL_infos.o -LOpenCL -LGAL-fb
@echo ' '
# Other Targets
clean:
-$(RM) OpenCLEnvInfos.o OpenCL_infos.o OpenCLEnvInfos.d OpenCL_infos.d OpenCLEnvInfos.exe
@echo ' '
Я попробовал все (заказ Libs в ссылке на команду), -l вместо -l (но компилятор их не находит)... Генерация make файла Eclipse вызывает больше ошибок, поэтому мне пришлось переписать его...
Надеюсь, у кого-то есть ответ: p
Батист
Вы злоупотребляете коммутаторами компилятора. Прочтите руководство GCC для получения дополнительной информации.
С помощью -L
вы должны -L
путь к каталогу поиска библиотек. В вашем случае, где libOpenCL.a
или OpenCL.a
. Например:
-LD:/Libraries/OpenCL/lib
С помощью -L
вы указываете библиотеку, с которой хотите связать. В вашем случае это будет libOpenCL.a
или OpenCL.a
. Как это:
-lOpenCL
Порядок правильный. Другими словами, вы должны хранить эти -L
переключатели после всех *.o
файлов (при вызове g++
для стадии linkage), если эти файлы *.o
зависят от библиотек, указанных в -L
, что в вашем случае действительно верно.