我需要在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_size
和size_t
。如果我在[]之前添加#include <stdlib.h>
:
#include <stdlib.h> #include <avifile.h> int main(void) { return 0; }
然后,它可以很好地构建。
为什么我需要在此处包括stdlib.h
和avifile.h
?我对C ++不太熟悉,但是我知道m_size
,size_t
,...(avifile都需要)是在stdlib.h
中定义的。
我需要在C ++中使用avifile库(https://packages.debian.org/stretch/libavifile-0.7-dev)。我有以下main.cpp文件作为最小的可复制示例:#include