繁体   English   中英

编译器标志的位置-l

[英]Position of compiler flag -l

我正在学习OpenCL。 现在,当我想编译我的程序时,我得到一个错误:

g++ -Wall -l OpenCL main.cpp -o main

错误大多是未定义的引用,因为我没有链接库(不过我会在最后发布错误代码)。

但是使用这个命令一切正常:

g++ -Wall main.cpp -o main -l OpenCL

所以我的问题是,我需要做什么,在命令前使用-l Flag? (背景是:我想使用Netbeans编译我的程序,当我在 - >属性 - >构建 - > C ++编译器 - >附加选项下添加标志时,它将放入位置,如第一个命令所示)

在此先感谢您的帮助

这是错误代码:

/tmp/ccmKP4oI.o: In function `cl::detail::ReferenceHandler<_cl_context*>::release(_cl_context*)':
main.cpp:(.text._ZN2cl6detail16ReferenceHandlerIP11_cl_contextE7releaseES3_[_ZN2cl6detail16ReferenceHandlerIP11_cl_contextE7releaseES3_]+0x14): undefined reference to `clReleaseContext'
/tmp/ccmKP4oI.o: In function `cl::detail::ReferenceHandler<_cl_command_queue*>::release(_cl_command_queue*)':
main.cpp:(.text._ZN2cl6detail16ReferenceHandlerIP17_cl_command_queueE7releaseES3_[_ZN2cl6detail16ReferenceHandlerIP17_cl_command_queueE7releaseES3_]+0x14): undefined reference to `clReleaseCommandQueue'
/tmp/ccmKP4oI.o: In function `cl::Platform::getInfo(unsigned int, std::string*) const':
main.cpp:(.text._ZNK2cl8Platform7getInfoEjPSs[_ZNK2cl8Platform7getInfoEjPSs]+0x22): undefined reference to `clGetPlatformInfo'
/tmp/ccmKP4oI.o: In function `cl::Platform::get(std::vector<cl::Platform, std::allocator<cl::Platform> >*)':
main.cpp:(.text._ZN2cl8Platform3getEPSt6vectorIS0_SaIS0_EE[_ZN2cl8Platform3getEPSt6vectorIS0_SaIS0_EE]+0x41): undefined reference to `clGetPlatformIDs'
main.cpp:(.text._ZN2cl8Platform3getEPSt6vectorIS0_SaIS0_EE[_ZN2cl8Platform3getEPSt6vectorIS0_SaIS0_EE]+0xb4): undefined reference to `clGetPlatformIDs'
collect2: error: ld returned 1 exit status

g++的[大多数]参数的顺序非常重要。

库应该是最后的(至少在源文件和目标文件之后)。 你不能真正改变它。

最好将-l 粘贴到库名:

 g++ -Wall main.cpp -o main -lOpenCL
 #                          ^^^ glue the -l to the library name

您可能还希望将-g (除了-Wall )传递给编译器以获取可调试的二进制文件。 使用gdb调试器。

正如James Kanze评论的那样,如果使用专门的gdb ,你可能想用-ggdb替换-g

使用g ++(通常在Unix下),- -l指定输入源( .a.so ),并按顺序处理输入。 当输入是静态库( .a文件)时,将扫描解析未定义引用的对象; 如果它是.so ,则其中没有任何目标文件,但如果它解析了一些未定义的符号,它仍然只会被考虑在内。

在任何目标文件之前放置-l ,还没有未定义的符号,因此程序中不会包含任何内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM