【问题标题】:use Boost on VS Code在 VS Code 上使用 Boost
【发布时间】:2017-07-20 16:50:51
【问题描述】:

g++ 使用此任务找不到 boost/regex.hpp:

{
            "taskName": "C4B", // Compile for debug with boost
            "command": "g++",
            "args": [
                "-g","${fileBasename}""-o","${fileBasenameNoExtension}"
            ],
            "type": "shell"
        },

我也试过使用这个参数:"-IC:\\boost\\include\\boost-1_64\\boost"

g++ 是通过 MinGW 安装的,我将 bin 添加到 PATH 环境变量中

我一直使用 Visual Studio IDE...我是命令行新手

这就是我在 VS Code 中包含路径的方式:

    "includePath": [
                    "C:\\MinGW\\lib\\gcc\\mingw32\\5.3.0\\include\\c++",
                    "C:\\boost\\include\\boost-1_64\\boost"

                ],
    "browse": {
                "path": [
                    "C:\\MinGW\\lib\\gcc\\mingw32\\5.3.0\\include\\c++",
                    "C:\\boost\\include\\boost-1_64\\boost"

                ],

在此之前我只包含C:\\boost\\include

这是错误:

test1.cpp:1:27: fatal error: boost/regex.hpp: No such file or directory

编译终止。 我该如何解决这个问题?


更新 1:

所以我同时包含了 include 和 lib 文件夹:

"includePath": [
                "C:\\MinGW\\lib\\gcc\\mingw32\\5.3.0\\include\\c++",
                "C:\\boost\\include",
                "C:\\boost\\lib"

            ],

而我的编译任务是:

{
            "taskName": "C4B", // Compile for debug with boost
            "command": "g++",
            "args": [
                "-g","${fileBasename}","-IC:\\boost\\include\\boost-1_64","-o","${fileBasenameNoExtension}"
            ],
            "type": "shell"
        }

现在我有这个输出:

C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640027cpp_regex_traits_char_layerIcEC2
ERKNS0_21cpp_regex_traits_baseIcEE':
C:/boost/include/boost-1_64/boost/regex/v4/cpp_regex_traits.hpp:370: undefined reference to `boost::re_detail_106400::c
pp_regex_traits_char_layer<char>::init()'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640011raw_storage6extendEj':
C:/boost/include/boost-1_64/boost/regex/v4/regex_raw_buffer.hpp:131: undefined reference to `boost::re_detail_106400::r
aw_storage::resize(unsigned int)'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640015save_state_initC1EPPNS0_11saved_
stateES4_':
C:/boost/include/boost-1_64/boost/regex/v4/perl_matcher_non_recursive.hpp:107: undefined reference to `boost::re_detail
_106400::get_mem_block()'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640015save_state_initD1Ev':
C:/boost/include/boost-1_64/boost/regex/v4/perl_matcher_non_recursive.hpp:115: undefined reference to `boost::re_detail
_106400::put_mem_block(void*)'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640012perl_matcherIN9__gnu_cxx17__norm
al_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISC_EEENS_12regex_traitsIcNS_16cpp
_regex_traitsIcEEEEE9match_impEv':
C:/boost/include/boost-1_64/boost/regex/v4/perl_matcher_common.hpp:214: undefined reference to `boost::re_detail_106400
::verify_options(unsigned int, boost::regex_constants::_match_flags)'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640012perl_matcherIN9__gnu_cxx17__norm
al_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISC_EEENS_12regex_traitsIcNS_16cpp
_regex_traitsIcEEEEE18unwind_extra_blockEb':
C:/boost/include/boost-1_64/boost/regex/v4/perl_matcher_non_recursive.hpp:1352: undefined reference to `boost::re_detai
l_106400::put_mem_block(void*)'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640011raise_errorINS_20regex_traits_wr
apperINS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEEEvRKT_NS_15regex_constants10error_typeE':
C:/boost/include/boost-1_64/boost/regex/pattern_except.hpp:75: undefined reference to `boost::re_detail_106400::raise_r
untime_error(std::runtime_error const&)'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640012perl_matcherIN9__gnu_cxx17__norm
al_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISC_EEENS_12regex_traitsIcNS_16cpp
_regex_traitsIcEEEEE12extend_stackEv':
C:/boost/include/boost-1_64/boost/regex/v4/perl_matcher_non_recursive.hpp:222: undefined reference to `boost::re_detail
_106400::get_mem_block()'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640018basic_regex_parserIcNS_12regex_t
raitsIcNS_16cpp_regex_traitsIcEEEEE4failENS_15regex_constants10error_typeEiNSt7__cxx1112basic_stringIcSt11char_traitsIc
ESaIcEEEi':
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_parser.hpp:237: undefined reference to `boost::regex_error::rege
x_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::regex_constants:
:error_type, int)'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_parser.hpp:238: undefined reference to `boost::regex_error::rais
e() const'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_parser.hpp:237: undefined reference to `boost::regex_error::~reg
ex_error()'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_parser.hpp:237: undefined reference to `boost::regex_error::~reg
ex_error()'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640019basic_regex_creatorIcNS_12regex_
traitsIcNS_16cpp_regex_traitsIcEEEEE16fixup_recursionsEPNS0_14re_syntax_baseE':
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:783: undefined reference to `boost::regex_error::reg
ex_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::regex_constants
::error_type, int)'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:784: undefined reference to `boost::regex_error::rai
se() const'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:783: undefined reference to `boost::regex_error::~re
gex_error()'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:872: undefined reference to `boost::regex_error::reg
ex_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::regex_constants
::error_type, int)'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:873: undefined reference to `boost::regex_error::rai
se() const'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:872: undefined reference to `boost::regex_error::~re
gex_error()'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:783: undefined reference to `boost::regex_error::~re
gex_error()'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:872: undefined reference to `boost::regex_error::~re
gex_error()'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640019basic_regex_creatorIcNS_12regex_
traitsIcNS_16cpp_regex_traitsIcEEEEE16create_startmapsEPNS0_14re_syntax_baseE':
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:938: undefined reference to `boost::regex_error::reg
ex_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::regex_constants
::error_type, int)'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:939: undefined reference to `boost::regex_error::rai
se() const'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:938: undefined reference to `boost::regex_error::~re
gex_error()'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:938: undefined reference to `boost::regex_error::~re
gex_error()'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640019basic_regex_creatorIcNS_12regex_
traitsIcNS_16cpp_regex_traitsIcEEEEE15create_startmapEPNS0_14re_syntax_baseEPhPjh':
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:1139: undefined reference to `boost::regex_error::re
gex_error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::regex_constant
s::error_type, int)'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:1140: undefined reference to `boost::regex_error::ra
ise() const'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:1139: undefined reference to `boost::regex_error::~r
egex_error()'
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:1139: undefined reference to `boost::regex_error::~r
egex_error()'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZNK5boost16re_detail_10640031cpp_regex_traits_implementation
IcE12error_stringENS_15regex_constants10error_typeE':
C:/boost/include/boost-1_64/boost/regex/v4/cpp_regex_traits.hpp:447: undefined reference to `boost::re_detail_106400::g
et_default_error_string(boost::regex_constants::error_type)'
C:/boost/include/boost-1_64/boost/regex/v4/cpp_regex_traits.hpp:449: undefined reference to `boost::re_detail_106400::g
et_default_error_string(boost::regex_constants::error_type)'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640019basic_regex_creatorIcNS_12regex_
traitsIcNS_16cpp_regex_traitsIcEEEEE12insert_stateEiNS0_19syntax_element_typeEj':
C:/boost/include/boost-1_64/boost/regex/v4/basic_regex_creator.hpp:320: undefined reference to `boost::re_detail_106400
::raw_storage::insert(unsigned int, unsigned int)'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost12object_cacheINS_16re_detail_10640021cpp_regex_trai
ts_baseIcEENS1_31cpp_regex_traits_implementationIcEEE3getERKS3_j':
C:/boost/include/boost-1_64/boost/regex/pending/object_cache.hpp:66: undefined reference to `boost::scoped_static_mutex
_lock::scoped_static_mutex_lock(boost::static_mutex&, bool)'
C:/boost/include/boost-1_64/boost/regex/pending/object_cache.hpp:66: undefined reference to `boost::scoped_static_mutex
_lock::~scoped_static_mutex_lock()'
C:/boost/include/boost-1_64/boost/regex/pending/object_cache.hpp:66: undefined reference to `boost::scoped_static_mutex
_lock::~scoped_static_mutex_lock()'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZNK5boost16re_detail_10640031cpp_regex_traits_implementation
IcE18lookup_collatenameEPKcS4_':
C:/boost/include/boost-1_64/boost/regex/v4/cpp_regex_traits.hpp:680: undefined reference to `boost::re_detail_106400::l
ookup_default_collate_name(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16re_detail_10640031cpp_regex_traits_implementationI
cE4initEv':
C:/boost/include/boost-1_64/boost/regex/v4/cpp_regex_traits.hpp:721: undefined reference to `boost::re_detail_106400::r
aise_runtime_error(std::runtime_error const&)'
C:/boost/include/boost-1_64/boost/regex/v4/cpp_regex_traits.hpp:736: undefined reference to `boost::re_detail_106400::g
et_default_error_string(boost::regex_constants::error_type)'
C:\Users\dj_al\AppData\Local\Temp\cctBnhDJ.o: In function `ZN5boost16cpp_regex_traitsIcE16get_catalog_nameEv':
C:/boost/include/boost-1_64/boost/regex/v4/cpp_regex_traits.hpp:1117: undefined reference to `boost::scoped_static_mute
x_lock::scoped_static_mutex_lock(boost::static_mutex&, bool)'
C:/boost/include/boost-1_64/boost/regex/v4/cpp_regex_traits.hpp:1117: undefined reference to `boost::scoped_static_mute
x_lock::~scoped_static_mutex_lock()'
C:/boost/include/boost-1_64/boost/regex/v4/cpp_regex_traits.hpp:1117: undefined reference to `boost::scoped_static_mute
x_lock::~scoped_static_mutex_lock()'
collect2.exe: error: ld returned 1 exit status

【问题讨论】:

  • 你确定-I\\C:?那不应该只是-IC:\boost\\include\\boost-1_64\\boost吗?
  • 我用 -IC:\\boost\\include\\boost-1_64\\boost 更正了路径,但结果是一样的
  • C:\boost\lib 应该在库路径中,而不是包含路径中。您还应该添加要链接的库。从编译器输出来看,Boost.Regex 的库似乎丢失了。
  • VS Code只有includePath和browse.path 不知道有没有可以链接的东西

标签: c++ boost visual-studio-code


【解决方案1】:

如果 C:\boost\include\boost-1_64 是您安装 Boost 的位置(即解压缩源包),那么这就是您应该添加到包含目录的路径,而不是 C:\boost\include\boost-1_64\boost。尾随 boost 目录存在于代码中的 #include 指令中。

如果您使用的是图形 IDE,我希望它在保存项目时根据需要自动执行转义反斜杠 ('\') 字符。否则你可能不得不手动转义它们。

【讨论】:

  • 我对这个命令行的东西没有信心。我以这种方式安装了 boost:在 Downloads 文件夹中解压,然后运行 ​​bootstrap gcc 和 b2 --prefix=C:\boost --toolset=gcc install 所以我在 C:\boost 中有 include 和 libs 文件夹
  • b2 --prefix=C:\boost install 将标头放入 C:\boost\include 并将库构建到 C:\boost\lib,因此您应该将这些路径添加到包含和库路径中。
  • 另外,您肯定可以在文件系统资源管理器中看到文件的安装位置。
【解决方案2】:

正如Andrey Semashev 所说,一定要使用Boost 的安装位置,而不是解压后的源位置。如果您在安装 Boost 时没有选择安装前缀,则为标准,这将是 Windows 上的 C:\Boost。

对我来说,在 Visual Studio Code 中,我唯一需要做的就是打开我的项目的 task.json,并在以下几行中打开:

“参数”:[
“-我”,
“C:/Boost/include/boost-1_73” ]

这将创建一个包含 boost 目录的编译器参数。然后在文件中,您应该能够包含 Boost,如下例所示:#include .

在整个 tasks.json 文件下方:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "C/C++: g++.exe build active file",
            "command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
            "args": [
                "-g",
                "${workspaceFolder}\\*.cpp",
                "-o",
                "${fileDirname}\\myProgram.exe",
                "-I",
                "C:/Boost/include/boost-1_73"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 2018-05-13
    相关资源
    最近更新 更多