#include 需要#include 才能使构建成功

问题描述 投票:-1回答:2

我需要在C ++中使用avifile库(https://packages.debian.org/stretch/libavifile-0.7-dev)。

我有以下main.cpp文件作为最小的可复制示例:

#include <avifile.h>

int main(void) {
    return 0;
}

我正在尝试在Docker容器内构建main.cpp文件(用于可复制的构建),使用此Dockerfile仅安装所需的依赖项:

FROM    debian:stretch

RUN     apt update \
 &&     apt install -y \
            g++ \
            libavifile-0.7-dev

当我在容器中构建时:

g++ -o main.o main.cpp `avifile-config --libs` `avifile-config --cflags` 

,解析为以下命令:

g++ -o main.o main.cpp -L/usr/lib/x86_64-linux-gnu -laviplay -I/usr/include/avifile-0.7

该版本产生很多错误,例如:

In file included from /usr/include/avifile-0.7/avm_stl.h:8:0,
                 from /usr/include/avifile-0.7/avifile.h:4,
                 from main.cpp:1:
/usr/include/avifile-0.7/avm_stl.h: In member function 'void avm::vector<Type>::erase(avm::vector<Type>::iterator)':
/usr/include/avifile-0.7/avm_stl.h:333:12: error: 'm_size' was not declared in this scope
     assert(m_size > 0);
            ^
In file included from main.cpp:1:0:
/usr/include/avifile-0.7/avifile.h: At global scope:
/usr/include/avifile-0.7/avifile.h:96:13: error: 'size_t' does not name a type
     virtual size_t GetHeader(void* pheader = 0, size_t size = 0) const =0;
             ^~~~~~
/usr/include/avifile-0.7/avifile.h:104:13: error: 'size_t' does not name a type
     virtual size_t GetAudioFormat(void* format = 0, size_t size = 0) const =0;
             ^~~~~~

导入#include <avifile.h>对错误负责。错误与avifile标头有关,因此我无法对其进行修改。似乎该构建找不到一些基本内容,例如m_sizesize_t。如果我在[]之前添加#include <stdlib.h>

#include <stdlib.h>
#include <avifile.h>

int main(void) {
    return 0;
}

然后,它可以很好地构建。

为什么我需要在此处包括stdlib.havifile.h?我对C ++不太熟悉,但是我知道m_sizesize_t,...(avifile都需要)是在stdlib.h中定义的。

我需要在C ++中使用avifile库(https://packages.debian.org/stretch/libavifile-0.7-dev)。我有以下main.cpp文件作为最小的可复制示例:#include ...

c++ avi
2个回答
1
投票

为什么我需要在这里包括stdlib.h和avifile.h?


1
投票

问题,正如您已经推断出的那样,avifile.h中有一些代码使用以size_t类型声明的变量或类成员,该代码是[[not

© www.soinside.com 2019 - 2024. All rights reserved.