C++ 如何获取有关“的更多信息”;X导致截面类型与Y“冲突;

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没有帮助 出于同样的原因,我很难将它简化为一个最小的测试用例,所以目前我没有一个最小的测试用例 我们如

我正在一台运行AIX(oslevel7200-00-01-1543)和GCC6.1(6.1.0)的POWER8机器上工作。我们正在捕获下面显示的编译错误。我正试图收集更多关于冲突起因的信息

我读过,但并不完全清楚内联与冲突的关系,冲突是由(1)一个类中的析构函数和(2)另一个类中的方法引起的(两者都没有标记为内联)

另一个好问题是,我们没有使用链接器脚本,并且在bss中初始化的
-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算法。