[英]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.