我正在使用运行AIX(oslevel 7200-00-01-1543)和GCC 6.1(6.1.0)的Power 8机器。我们正在捕获下面显示的编译错误。我试图收集有关导致冲突的更多信息。
我读过Inline static data causes a section type conflict,但我并不完全清楚内联是如何涉及由(1)一个类中的析构函数引起的冲突和(2)不同类中的方法(两者都不是标记为内联)。
另一个好问题是GCC error “ causes a section type conflict”,但我们没有使用链接描述文件而且-fno-zero-initialized-in-bss
没有帮助。
由于同样的原因,我无法将其减少到最小的测试用例,因此我目前没有最小的测试用例。
我们如何收集有关导致错误的冲突的更多信息?有没有办法指示GCC告诉我们有关这些部分的更多信息,或者告诉我们导致冲突的属性?
当我添加-save-temps
标志然后检查文物时,我看不到任何异常。
提出问题Section type conflict for identically defined variables的人有同样的问题。他试图对其进行故障排除,但无法找到其他信息。
现在在GCC问题跟踪器中打开:Compile error "X causes a section type conflict with Y" should provide more information。
我们在许多系统上进行测试,AIX机器是唯一有问题的机器。在使用GCC运行openSUSE的另一台Power 8机器上,我们没有遇到这个问题。
-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
我们的修复方法是将析构函数移出,如下所示。我们不知道导致问题的原因或原因是什么。最初的问题仍然存在:我们将来如何解决问题呢?
@@ -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