问题描述
我正在尝试在我的第一个 C++ 项目中包含一个 3rd 方库。
这是文件结构:
代码如下:
如果我尝试编译它,我会收到以下错误:
Starting build... /usr/bin/g++ -g /home/?/projects/c++/test.cpp -o /home/?/projects/c++/test
/usr/bin/ld: /tmp/cci5qRjP.o: in function `main': /home/?/projects/c++/test.cpp:7: undefined reference to `omp::HandEvaluator::HandEvaluator()'
/usr/bin/ld: /tmp/cci5qRjP.o: in function `omp::Hand::Hand(unsigned int)': /home/?/projects/c++/include/OMPEval/omp/Hand.h:49: undefined reference to `omp::Hand::CARDS'
/usr/bin/ld: /tmp/cci5qRjP.o: in function `omp::Hand::empty()': /home/?/projects/c++/include/OMPEval/omp/Hand.h:114: undefined reference to `omp::Hand::EMPTY'
/usr/bin/ld: /tmp/cci5qRjP.o: in function `omp::HandEvaluator::perfHash(unsigned int)': /home/?/projects/c++/include/OMPEval/omp/HandEvaluator.h:39: undefined reference to `omp::HandEvaluator::PERF_HASH_ROW_OFFSETS'
/usr/bin/ld: /tmp/cci5qRjP.o: in function `unsigned short omp::HandEvaluator::evaluate<true>(omp::Hand const&) const': /home/?/projects/c++/include/OMPEval/omp/HandEvaluator.h:27: undefined reference to `omp::HandEvaluator::LOOKUP'
/usr/bin/ld: /home/?/projects/c++/include/OMPEval/omp/HandEvaluator.h:31: undefined reference to `omp::HandEvaluator::FLUSH_LOOKUP'
collect2: error: ld returned 1 exit status
Build finished with error(s). The terminal process Failed to launch (exit code: -1).
Terminal will be reused by tasks,press any key to close it.
c_cpp_properties.json
launch.json
tasks.json
解决方法
无论tasks.json 来自哪里,它都不适用于包含多个源文件的复杂项目。它只编译并尝试链接单个 .cpp 文件;当有多个应该一起工作的 .cpp 文件时,这注定会失败。
您的项目目录中有一个名为 Makefile
的文件...更新 tasks.json 以运行 make
并让 make 运行编译器和链接器将是一个好的开始...但您应该还希望在每次向项目添加新文件时修改 Makefile。