使用C ++ Wrappers的OpenCL 1.1 Undefined Reference

时间:2013-10-14 16:41:21

标签: c++ eclipse gcc cygwin opencl

我正在尝试使用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

巴普蒂斯特

1 个答案:

答案 0 :(得分:0)

您滥用编译器开关。有关更多信息,请阅读GCC手册。

使用-L,您应该提供目录搜索库的路径。在您的情况下,libOpenCL.aOpenCL.a位于何处。例如:

-LD:/Libraries/OpenCL/lib

使用-l指定要链接的库。在您的情况下,这将是libOpenCL.aOpenCL.a。像这样:

-lOpenCL

订单是正确的。换句话说,如果-l *.o g++,那么您应该在所有*.o个文件后保留这些-l(在{{1}}调用链接阶段)文件取决于{{1}}指定的库,在您的情况下确实如此。