Compiler construction Can';t编译C++;项目(宏“max”传递了3个参数,但只接受2个) 对不起,对于一般的标题,我在C++编译时不是专业人员,我在这里找不到错误。

Compiler construction Can';t编译C++;项目(宏“max”传递了3个参数,但只接受2个) 对不起,对于一般的标题,我在C++编译时不是专业人员,我在这里找不到错误。,compiler-construction,g++,makefile,compiler-errors,Compiler Construction,G++,Makefile,Compiler Errors,我正在检查一个官方项目,所以我知道这个东西实际上应该编译得很好。没有 如果有人想自己签出代码,请执行以下操作: cvs -d :pserver:jvtuser:jvt.Amd.2@garcon.ient.rwth-aachen.de:/cvs/jvt login cvs -d :pserver:jvtuser@garcon.ient.rwth-aachen.de:/cvs/jvt checkout jmvc cd jmvc/JMVC/H264Extension/build/linux make

我正在检查一个官方项目,所以我知道这个东西实际上应该编译得很好。没有

如果有人想自己签出代码,请执行以下操作:

cvs -d :pserver:jvtuser:jvt.Amd.2@garcon.ient.rwth-aachen.de:/cvs/jvt login
cvs -d :pserver:jvtuser@garcon.ient.rwth-aachen.de:/cvs/jvt checkout jmvc
cd jmvc/JMVC/H264Extension/build/linux
make
当我调用
make
时,我收到:

make -C lib/H264AVCVideoIoLib release
make[1]: Entering directory `/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib'
g++ -c -MMD -MF ./objects/H264AVCVideoIoLib.r.d -MT ./objects/H264AVCVideoIoLib.r.o -fPIC -DMSYS_LINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DMSYS_UNIX_LARGEFILE  -I/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include -I../../../../src/lib/H264AVCVideoIoLib -DMERL_VIEW -Wall -Wshadow -Wno-reorder -Wno-sign-compare -O3 -ffloat-store -DNDEBUG -Wuninitialized -o objects/H264AVCVideoIoLib.r.o /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../src/lib/H264AVCVideoIoLib/H264AVCVideoIoLib.cpp
In file included from /usr/include/c++/4.4/bits/stl_algo.h:61,
                 from /usr/include/c++/4.4/algorithm:62,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/H264AVCCommonIf.h:56,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/H264AVCVideoIoLib.h:5,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../src/lib/H264AVCVideoIoLib/H264AVCVideoIoLib.cpp:2:
/usr/include/c++/4.4/bits/algorithmfwd.h:353: error: macro "max" passed 3 arguments, but takes just 2
/usr/include/c++/4.4/bits/algorithmfwd.h:364: error: macro "min" passed 3 arguments, but takes just 2
In file included from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemCont.h:9,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemList.h:9,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/H264AVCCommonIf.h:45,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/H264AVCVideoIoLib.h:5,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../src/lib/H264AVCVideoIoLib/H264AVCVideoIoLib.cpp:2:
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemAccessor.h: In member function ‘Void MemAccessList<T>::copyPayload(T*&, UInt&)’:
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemAccessor.h:207: error: ‘::memcpy’ has not been declared
In file included from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemList.h:9,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/H264AVCCommonIf.h:45,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/H264AVCVideoIoLib.h:5,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../src/lib/H264AVCVideoIoLib/H264AVCVideoIoLib.cpp:2:
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemCont.h: In copy constructor ‘MemCont<T>::MemCont(const MemCont<T>&)’:
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemCont.h:68: error: ‘::memcpy’ has not been declared
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemCont.h: In member function ‘MemCont<T>& MemCont<T>::operator=(const MemCont<T>&)’:
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemCont.h:113: error: ‘::memcpy’ has not been declared
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemCont.h: In member function ‘Void MemCont<T>::release(T*&, UInt&)’:
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemCont.h:221: error: ‘::memcpy’ has not been declared
In file included from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/H264AVCCommonIf.h:45,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/H264AVCVideoIoLib.h:5,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../src/lib/H264AVCVideoIoLib/H264AVCVideoIoLib.cpp:2:
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemList.h: In copy constructor ‘MemList<T>::MemList(const MemList<T>&)’:
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemList.h:31: error: ‘::memcpy’ has not been declared
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemList.h: In member function ‘MemList<T>& MemList<T>::operator=(const MemList<T>&)’:
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemList.h:68: error: ‘::memcpy’ has not been declared
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemList.h: In member function ‘Void MemList<T>::release(T*&, UInt&)’:
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemList.h:129: error: ‘::memcpy’ has not been declared
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemList.h:151: error: ‘::memcpy’ has not been declared
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemList.h: In member function ‘Void MemList<T>::release(T*&, UInt&, T*&, UInt&)’:
/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/MemList.h:181: error: ‘::memcpy’ has not been declared
In file included from /usr/include/c++/4.4/bits/stl_algo.h:61,
                 from /usr/include/c++/4.4/algorithm:62,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/H264AVCCommonIf.h:56,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/H264AVCVideoIoLib.h:5,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../src/lib/H264AVCVideoIoLib/H264AVCVideoIoLib.cpp:2:
/usr/include/c++/4.4/bits/algorithmfwd.h: At global scope:
/usr/include/c++/4.4/bits/algorithmfwd.h:349: error: expected unqualified-id before ‘const’
/usr/include/c++/4.4/bits/algorithmfwd.h:349: error: expected ‘)’ before ‘const’
/usr/include/c++/4.4/bits/algorithmfwd.h:349: error: expected ‘)’ before ‘const’
/usr/include/c++/4.4/bits/algorithmfwd.h:349: error: expected initializer before ‘const’
/usr/include/c++/4.4/bits/algorithmfwd.h:353: error: template declaration of ‘const _Tp& std::max’
/usr/include/c++/4.4/bits/algorithmfwd.h:360: error: expected unqualified-id before ‘const’
/usr/include/c++/4.4/bits/algorithmfwd.h:360: error: expected ‘)’ before ‘const’
/usr/include/c++/4.4/bits/algorithmfwd.h:360: error: expected ‘)’ before ‘const’
/usr/include/c++/4.4/bits/algorithmfwd.h:360: error: expected initializer before ‘const’
/usr/include/c++/4.4/bits/algorithmfwd.h:364: error: template declaration of ‘const _Tp& std::min’
In file included from /usr/include/c++/4.4/algorithm:62,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/H264AVCCommonIf.h:56,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../include/H264AVCVideoIoLib.h:5,
                 from /home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib/../../../../src/lib/H264AVCVideoIoLib/H264AVCVideoIoLib.cpp:2:
/usr/include/c++/4.4/bits/stl_algo.h: In function ‘void std::__merge_sort_loop(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, _Distance)’:
/usr/include/c++/4.4/bits/stl_algo.h:3239: error: expected unqualified-id before ‘(’ token
/usr/include/c++/4.4/bits/stl_algo.h: In function ‘void std::__merge_sort_loop(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, _Distance, _Compare)’:
/usr/include/c++/4.4/bits/stl_algo.h:3263: error: expected unqualified-id before ‘(’ token
make[1]: *** [objects/H264AVCVideoIoLib.r.o] Error 1
make[1]: Leaving directory `/home/user/JMVC/jmvc/JMVC/H264Extension/build/linux/lib/H264AVCVideoIoLib'
make: *** [release] Error 2
。。。和gcc:

Using built-in specs.
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.4-14ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) 

如果有人有一些指针,我会非常感激…

C++的标准库没有使用或定义
max
min
作为宏。报告第一个错误的行(
/usr/include/c++/4.4/bits/algorithmfwd.h:353
)包含std::max模板函数的前向声明和第三个参数。从您提供的信息中可以看出,我认为在您的系统中包含了一些旧标题,它将
max()
min()
定义为宏。顺便说一下,这是一个常见的问题

您需要识别定义
max
/
min
的头文件(或源文件),并尝试找出是否有方法将源代码配置为在不使用该头的情况下生成

更新: 罪魁祸首似乎在源文件中:

> grep -R "#define min" *
include/DownConvertTools.inl:#define min(x, y) ((x)<(y)?(x):(y))
include/H264AVCCommonLib/GlobalFunctions.h:#define min(x,y) ((x)<(y)?(x):(y))
include/H264AVCCommonIf.h:#define min(x,y) ((x)<(y)?(x):(y))
src/test/H264AVCDecoderLibTest/DecoderParameter.h:#define min(x,y) (((x) < (y)) ? (x) : (y))
src/lib/H264AVCCommonLib/CFMO.cpp://#define min(a,b) ((a)>(b))?b:a
>grep-R“#定义最小值”*

include/DownConvertTools.inl:#定义最小值(x,y)((x)软件实际上不使用ddraw.lib,因此您可以安全地从链接器使用的库列表中删除ddraw.lib,解决方案将成功生成。

您的最小和最大宏已损坏。请发布它们,我们可以让您知道出现了什么问题。同样,此处-您是否已经找到任何解决方法或修复方法?或者您是否重新编码了在存储库中输入一个工作版本?不,这个问题似乎非常特定于此JM代码。也许他们在这两者之间解决了它,但我更愿意编写开发人员。我还没有尝试过它,但自从我写了这个问题以来,发布了一些新版本。@vlslook很有希望,我会研究一下。不过我不想胡闹不是我自己的代码。有可能存储库维护人员不知道这个问题吗?还有更多的问题。memcpy和sprintf缺少适当的包含。有时特定系统的构建会中断,因为系统没有优先级(而且经常有足够多的开发人员根本不知道如何编写在他们自己的平台下编译的代码)。构建代码似乎可以在Windows上运行(除了我的计算机上缺少的ddraw.lib),所以我猜最后几次签入根本没有针对linux进行测试。你可以问所有者这是否是一个已知的问题,他们是否会从你那里获取修补程序来解决它。我有一个Windows工作站,我可以尝试在其上编译。也许我还可以恢复到一个更稳定的分支。因此,基本上,你是说它会修复当前状态可能比找到一个有效的状态花费更长的时间?
> grep -R "#define min" *
include/DownConvertTools.inl:#define min(x, y) ((x)<(y)?(x):(y))
include/H264AVCCommonLib/GlobalFunctions.h:#define min(x,y) ((x)<(y)?(x):(y))
include/H264AVCCommonIf.h:#define min(x,y) ((x)<(y)?(x):(y))
src/test/H264AVCDecoderLibTest/DecoderParameter.h:#define min(x,y) (((x) < (y)) ? (x) : (y))
src/lib/H264AVCCommonLib/CFMO.cpp://#define min(a,b) ((a)>(b))?b:a