在 C++ 项目中的 VS 代码中包含 3rd 方库

问题描述

我正在尝试在我的第一个 C++ 项目中包含一个 3rd 方库。

这是文件结构:

image

代码如下:

image

如果我尝试编译它,我会收到以下错误

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.

代码用于 library 的文档。

c_cpp_properties.json

image

launch.json

image

tasks.json

image

解决方法

无论tasks.json 来自哪里,它都不适用于包含多个源文件的复杂项目。它只编译并尝试链接单个 .cpp 文件;当有多个应该一起工作的 .cpp 文件时,这注定会失败。

您的项目目录中有一个名为 Makefile 的文件...更新 tasks.json 以运行 make 并让 make 运行编译器和链接器将是一个好的开始...但您应该还希望在每次向项目添加新文件时修改 Makefile。