我正在尝试使用Cygwin Gcc / G ++编译器在Eclipse下编译OpenCL项目,并且我获得了一些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(但是编译器找不到它们)... Eclipse makefile生成会发生更多错误,这就是为什么我必须重写它...
我希望有人有答案:p
巴普蒂斯特
答案 0 :(得分:0)
您滥用编译器开关。有关更多信息,请阅读GCC手册。
使用-L
,您应该提供目录搜索库的路径。在您的情况下,libOpenCL.a
或OpenCL.a
位于何处。例如:
-LD:/Libraries/OpenCL/lib
使用-l
指定要链接的库。在您的情况下,这将是libOpenCL.a
或OpenCL.a
。像这样:
-lOpenCL
订单是正确的。换句话说,如果-l
*.o
g++
,那么您应该在所有*.o
个文件后保留这些-l
次(在{{1}}调用链接阶段)文件取决于{{1}}指定的库,在您的情况下确实如此。