c++ 为什么我得到奇怪的流浪错误与文件'cxxopts,hpp'和Meson + Ninja构建?

szqfcxe2  于 2023-05-02  发布在  其他
关注(0)|答案(1)|浏览(131)

我目前正在做this项目。我使用cxxopts.hpp来解析cli选项,但是自从我添加了它,我得到了一些错误,我现在列出了如何重现:
1.构建项目

meson build
cd build
ninja

1.到目前为止一切都很好,它建立没有任何错误。
1.除了test/vector.cpptest/random.cpp(这是我使用cxxopts.hpp的地方)之外,我可以修改任何东西,并使用ninja构建,没有任何问题。
1.然后当我编辑test/vector.cpptest/random.cpp并执行ninja时,出现以下错误:

[1/4] Compiling C++ object test/random.p/random.cpp.o
FAILED: test/random.p/random.cpp.o
c++ -Itest/random.p -Itest -I../test -I../include -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -Wpedantic -O0 -g -MD -MQ test/random.p/random.cpp.o -MF test/random.p/random.cpp.o.d -o test/random.p/random.cpp.o -c ../test/random.cpp
In file included from ../include/cxxopts.hpp:43,
                 from ../test/random.cpp:6:
test/vector:1:1: error: stray ‘\177’ in program
    1 | <U+007F>ELF<U+0002><U+0001><U+0001><U+0003><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0003><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000> F<U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>@<U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><90><91><U+0015><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>@<U+0000>8<U+0000><U+000D><U+0000>@<U+0000>(<U+0000>'<U+0000><U+0006><U+0000><U+0000><U+0000><U+0004><U+0000><U+0000><U+0000>@<U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>@<U+0000><U+0000><U+0000><U+0000>...
    (a very lengthy error up to 400 MB in a file)

我如何解决这个问题,或者为什么会发生这种情况?

t30tvxxf

t30tvxxf1#

正如KamilCuk在他们的评论中指出的那样,这个错误是由标准库#include <vector>和我从vector.cpp创建的二进制vector之间的名称冲突引起的。
更改二进制文件的名称可以解决这个问题。
也可以通过将选项implicit_include_directories设置为false来实现所需的行为,如下所示:

vector = executable('vector', 'vector.cpp', include_directories: incdir, implicit_include_directories: false)

相关问题