【问题标题】:Include 3rd party library in VS code in C++ project在 C++ 项目的 VS 代码中包含 3rd 方库
【发布时间】:2021-05-07 21:19:05
【问题描述】:

我正在尝试在我的第一个 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.

代码用于library的文档。

c_cpp_properties.json

launch.json

tasks.json

【问题讨论】:

  • 请使用tour 并阅读How to Ask。不要发布源代码的图像,发布格式正确的代码。
  • 这个omp 库是否提供了有关如何在 VSCode 中安装和使用它的说明?这些错误看起来像您没有链接到库的任何预编译二进制文件,或者将库的源文件直接包含到您的项目中。在不知道您如何设置项目的情况下很难回答您的问题。
  • 没有 VS Code 特定的指令,只是代码示例。
  • @RemyLebeau:库源文件在“项目”中(实际上VSCode没有项目只是目录树),但可能在也可能不在makefile中,并且VS Code未配置为使用makefile,他总是在运行一个只编译一个文件的构建。
  • @Paolo 您在弄清楚如何与 OMP 库链接时遇到了问题。尝试从命令行编译它,直到正确为止,然后也许你会弄清楚你的 VS Code 配置是如何存在缺陷的。

标签: c++ visual-studio-code g++ vscode-settings


【解决方案1】:

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

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

【讨论】:

  • Make 文件随 OMPEval(我从 githhub 下载的第 3 方库)一起提供。我应该用 make 和 include / link 构建它吗?当我用 g++ 构建项目时的结果(ompeval.a)?
  • 您可以构建一个静态库并将其与您的应用程序链接。或者,您可以将所有 OMPEval 文件单独链接到您的应用程序中。当活动文件本身不是一个完整的程序时,“构建活动文件”不起作用。
  • 我的 g++ 命令应该是什么样子?我用 make 成功构建了 OMPEval。现在我在文件夹 (c++/include/OPMEval/opm) 中有新的目标文件:CardRange.o、EquityCalcuator.o、HandEvaluator.o 等。
  • 现在看起来像这样:/usr/bin/g++ -g /home/?/projects/c++/test.cpp -I/home/?/projects/c++/include -L/home/?/projects/c++/include -o /home/?/projects/c++/test 但我得到:/home/?/projects/c++/test.cpp:1:10:致命错误:omp/HandEvaluator.h:没有这样文件或目录
  • @Paolo /home/?/projects/c++/test.cpp - 你肯定看到那里有问题吗?
猜你喜欢
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多