C++ 如何获取有关“的更多信息”;X导致截面类型与Y“冲突;
我正在一台运行AIX(oslevel7200-00-01-1543)和GCC6.1(6.1.0)的POWER8机器上工作。我们正在捕获下面显示的编译错误。我正试图收集更多关于冲突起因的信息 我读过,但并不完全清楚内联与冲突的关系,冲突是由(1)一个类中的析构函数和(2)另一个类中的方法引起的(两者都没有标记为内联) 另一个好问题是,我们没有使用链接器脚本,并且在bss中初始化的C++ 如何获取有关“的更多信息”;X导致截面类型与Y“冲突;,c++,linker,aix,powerpc,C++,Linker,Aix,Powerpc,我正在一台运行AIX(oslevel7200-00-01-1543)和GCC6.1(6.1.0)的POWER8机器上工作。我们正在捕获下面显示的编译错误。我正试图收集更多关于冲突起因的信息 我读过,但并不完全清楚内联与冲突的关系,冲突是由(1)一个类中的析构函数和(2)另一个类中的方法引起的(两者都没有标记为内联) 另一个好问题是,我们没有使用链接器脚本,并且在bss中初始化的-fno-zero没有帮助 出于同样的原因,我很难将它简化为一个最小的测试用例,所以目前我没有一个最小的测试用例 我们如
-fno-zero没有帮助
出于同样的原因,我很难将它简化为一个最小的测试用例,所以目前我没有一个最小的测试用例
我们如何收集有关导致错误的冲突的更多信息?有没有办法指示GCC告诉我们更多关于章节的信息,或者告诉我们导致冲突的属性
当我添加-save temps
标志,然后检查工件时,我没有看到任何异常
问这个问题的人也有同样的问题。他试图排除故障,但找不到其他信息
现在在GCC问题跟踪程序中打开:
我们在许多系统上进行了测试,AIX机器是唯一有问题的机器。在另一台运行openSUSE和GCC的POWER8机器上,我们没有遇到这个问题
-bash-4.3$ gmake
g++ -DNDEBUG -g2 -O3 -fPIC -pthread -pipe -c bench2.cpp
In file included from bench2.cpp:9:0:
gfpcrypt.h: In function 'CryptoPP::DL_PrivateKey_GFP<GP>::~DL_PrivateKey_GFP() [with GP = CryptoPP::DL_GroupParameters_DSA]':
gfpcrypt.h:519:13: error: CryptoPP::DL_PrivateKey_GFP<GP>::~DL_PrivateKey_GFP() [with GP = CryptoPP::DL_GroupParameters_DSA] causes a section type conflict with void CryptoPP::AllocatorWithCleanup<T, T_Align16>::deallocate(void*, CryptoPP::AllocatorWithCleanup<T, T_Align16>::size_type) [with T = unsigned char; bool T_Align16 = true]
virtual ~DL_PrivateKey_GFP() {}
^
In file included from integer.h:20:0,
from validate.h:8,
from bench2.cpp:6:
secblock.h:217:7: note: 'void CryptoPP::AllocatorWithCleanup<T, T_Align16>::deallocate(void*, CryptoPP::AllocatorWithCleanup<T, T_Align16>::size_type) [with T = unsigned char; bool T_Align16 = true]' was declared here
void deallocate(void *ptr, size_type size)
^~~~~~~~~~
GNUmakefile:1026: recipe for target 'bench2.o' failed
-bash-4.3$gmake
g++-DNDEBUG-g2-O3-fPIC-pthread-pipe-c bench2.cpp
在bench2.cpp中包含的文件中:9:0:
gfpcrypt.h:在函数“CryptoPP::DL_PrivateKey_GFP::~DL_PrivateKey_GFP()[带GP=CryptoPP::DL_GroupParameters_DSA]”中:
gfpcrypt.h:519:13:错误:CryptoPP::DL_PrivateKey_GFP::~DL_PrivateKey_GFP()[带GP=CryptoPP::DL_GroupParameters_DSA]导致节类型与void CryptoPP::AllocatorWithCleanup::deallocate(void*,CryptoPP::AllocatorWithCleanup::size_type)[带T=unsigned char;bool T_Align16=true]
虚拟~DL_PrivateKey_GFP(){}
^
在integer.h:20:0中包含的文件中,
从0.h:8,
来自bench2.cpp:6:
secblock.h:217:7:注意:此处声明了:“void CryptoPP::AllocatorWithCleanup::deallocate(void*,CryptoPP::AllocatorWithCleanup::size\u type)[with T=unsigned char;bool T\u Align16=true]”
作废解除分配(作废*ptr,大小\类型大小)
^~~~~~~~~~
GNUmakefile:1026:目标“bench2.o”的配方失败
我们的解决办法是将析构函数移出直线,如下所示。我们不知道是什么原因导致了问题,也不知道为什么问题得到了解决。最初的问题仍然是:我们将来如何解决这个问题
@@ -516,7 +516,7 @@ template <class GP>
class DL_PrivateKey_GFP : public DL_PrivateKeyImpl<GP>
{
public:
- virtual ~DL_PrivateKey_GFP() {}
+ virtual ~DL_PrivateKey_GFP();
//! \brief Create a private key
//! \param rng a RandomNumberGenerator derived class
@@ -570,6 +570,10 @@ class DL_PrivateKey_GFP : public DL_PrivateKeyImpl<GP>
{this->AccessGroupParameters().Initialize(p, q, g); this->SetPrivateExponent(x);}
};
+// Out-of-line dtor due to AIX and GCC
+template <class GP>
+DL_PrivateKey_GFP<GP>::~DL_PrivateKey_GFP() {}
+
//! \class DL_SignatureKeys_GFP
//! \brief Discrete Log (DL) signing/verification keys in GF(p) groups
struct DL_SignatureKeys_GFP
@-516,7+516,7@@template
类别DL_PrivateKey_GFP:公共DL_PrivateKeyImpl
{
公众:
-虚拟~DL_PrivateKey_GFP(){}
+虚拟~DL_PrivateKey_GFP();
//!\brief创建私钥
//!\param rng一个RandomNumberGenerator派生类
@@-570,6+570,10@@class DL_PrivateKey_GFP:public DL_PrivateKeyImpl
{this->AccessGroupParameters()。初始化(p,q,g);this->setPrivateIndex(x);}
};
+//由于AIX和GCC而导致的数据传输中断
+模板
+DL_PrivateKey_GFP::~DL_PrivateKey_GFP(){}
+
//! \类别DL\U签名密钥\U GFP
//! \GF(p)组中的简短离散日志(DL)签名/验证密钥
结构DL_SignatureKeys_GFP
这台机器上是否有一个CrytopPP的pkg.config文件,可以为您提供用于编译它的编译器标志?@richardhoges-不,我是从Master那里工作的。用于编译库和测试程序的编译标志是-DNDEBUG-g2-O3-fPIC-pthread
。两者都使用相同的cxflags
,编译器驱动器链接可确保应用相同的cxflags
。快速扫描源代码将指向宏CRYPTOPP\u部分16。还有一些其他宏出于不同的原因将数据强制放入不同的部分。我一直讨厌这个图书馆,我想它坏了。我使用openssl。谢谢@RichardHodges。是的,我已经试着注释了CRYPTOPP\u SECTION\u ALIGN16
。还有一些其他的嫌疑人也被评论掉了。你知道如何指示GCC给我们更多关于冲突的信息吗?@ RICHADHODGES——顺便说一下,如果你对C++安全库感兴趣,你可能喜欢劳埃德。Botan也有一个与OpenSSL不同的章程,所以它不仅仅做TLS。Botan提供OpenSSL不提供的算法,如PQC算法。该机器上是否有CrytopPP的pkg.config文件,可以为您提供用于编译它的编译器标志?@RichardHodges-不,我在Master上工作。用于编译库和测试程序的编译标志是-DNDEBUG-g2-O3-fPIC-pthread
。两者都使用相同的cxflags
,编译器驱动器链接可确保应用相同的cxflags
。快速扫描源代码将指向宏CRYPTOPP\u部分16。还有一些其他宏出于不同的原因将数据强制放入不同的部分。我一直讨厌这个图书馆,我想它坏了。我使用openssl。谢谢@RichardHodges。是的,我已经试着注释了CRYPTOPP\u SECTION\u ALIGN16
。还有一些其他的嫌疑人也被评论掉了。你知道如何指示GCC给我们更多关于冲突的信息吗?@ RICHADHODGES——顺便说一下,如果你对C++安全库感兴趣,你可能喜欢劳埃德。Botan也有一个与OpenSSL不同的章程,所以它不仅仅做TLS。Botan提供OpenSSL不提供的算法,如PQC算法。