Locked Compiling for arm64 Issue


JT Croteau
 

Friends, I'm trying to compile 2.1.2 on Linux arm64 but having an
issue. I'm wondering if anyone can help please? arm64 is a different
platform than armhf so I can't use the binary package on my Gentoo
system. Target hardware is a Raspberry Pi4B. Thanks

Failing here:

[ 69%] Building CXX object CMakeFiles/wsjt_qt.dir/qt_helpers.cpp.o
In file included from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp: In static
member function ‘static QVariant VPtr<T>::asQVariant(T*)’:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:77:61:
warning: ‘QVariant qVariantFromValue(const T&) [with T = void*]’ is
deprecated: Use QVariant::fromValue() instead.
[-Wdeprecated-declarations]
77 | return qVariantFromValue (reinterpret_cast<void *> (ptr));
| ^
In file included from /usr/include/qt5/QtCore/qlocale.h:43,
from /usr/include/qt5/QtCore/qtextstream.h:46,
from /usr/include/qt5/QtCore/qdebug.h:49,
from /usr/include/qt5/QtNetwork/qabstractsocket.h:47,
from /usr/include/qt5/QtNetwork/qhostaddress.h:48,
from /usr/include/qt5/QtNetwork/QHostAddress:1,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:9,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/usr/include/qt5/QtCore/qvariant.h:528:17: note: declared here
528 | inline QVariant qVariantFromValue(const T &t)
| ^~~~~~~~~~~~~~~~~
In file included from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp: At global scope:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:87:10: error:
redefinition of ‘struct std::hash<QString>’
87 | struct hash<QString>
| ^~~~~~~~~~~~~
In file included from /usr/include/qt5/QtCore/qlist.h:47,
from /usr/include/qt5/QtCore/qhash.h:46,
from /usr/include/qt5/QtCore/qshareddata.h:46,
from /usr/include/qt5/QtNetwork/qhostaddress.h:47,
from /usr/include/qt5/QtNetwork/QHostAddress:1,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:9,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/usr/include/qt5/QtCore/qhashfunctions.h:204:1: note: previous
definition of ‘struct std::hash<QString>’
204 | QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_CREF(QString)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gmake[5]: *** [CMakeFiles/wsjt_qt.dir/build.make:106:
CMakeFiles/wsjt_qt.dir/qt_helpers.cpp.o] Error 1
gmake[5]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[4]: *** [CMakeFiles/Makefile2:822: CMakeFiles/wsjt_qt.dir/all] Error 2
gmake[4]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[3]: *** [Makefile:169: all] Error 2
gmake[3]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[2]: *** [CMakeFiles/wsjtx-build.dir/build.make:78:
wsjtx-prefix/src/wsjtx-stamp/wsjtx-build] Error 2
gmake[2]: Leaving directory '/home/n1ese/build'
gmake[1]: *** [CMakeFiles/Makefile2:405: CMakeFiles/wsjtx-build.dir/all] Error 2
gmake[1]: Leaving directory '/home/n1ese/build'
gmake: *** [Makefile:101: all] Error 2


Bill Somerville
 

On 12/04/2020 20:24, JT Croteau wrote:
Friends, I'm trying to compile 2.1.2 on Linux arm64 but having an
issue.  I'm wondering if anyone can help please?  arm64 is a different
platform than armhf so I can't use the binary package on my Gentoo
system.  Target hardware is a Raspberry Pi4B. Thanks

Failing here:

[ 69%] Building CXX object CMakeFiles/wsjt_qt.dir/qt_helpers.cpp.o
In file included from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp: In static
member function ‘static QVariant VPtr<T>::asQVariant(T*)’:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:77:61:
warning: ‘QVariant qVariantFromValue(const T&) [with T = void*]’ is
deprecated: Use QVariant::fromValue() instead.
[-Wdeprecated-declarations]
   77 |     return qVariantFromValue (reinterpret_cast<void *> (ptr));
      |                                                             ^
In file included from /usr/include/qt5/QtCore/qlocale.h:43,
                 from /usr/include/qt5/QtCore/qtextstream.h:46,
                 from /usr/include/qt5/QtCore/qdebug.h:49,
                 from /usr/include/qt5/QtNetwork/qabstractsocket.h:47,
                 from /usr/include/qt5/QtNetwork/qhostaddress.h:48,
                 from /usr/include/qt5/QtNetwork/QHostAddress:1,
                 from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:9,
                 from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/usr/include/qt5/QtCore/qvariant.h:528:17: note: declared here
  528 | inline QVariant qVariantFromValue(const T &t)
      |                 ^~~~~~~~~~~~~~~~~
In file included from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp: At global scope:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:87:10: error:
redefinition of ‘struct std::hash<QString>’
   87 |   struct hash<QString>
      |          ^~~~~~~~~~~~~
In file included from /usr/include/qt5/QtCore/qlist.h:47,
                 from /usr/include/qt5/QtCore/qhash.h:46,
                 from /usr/include/qt5/QtCore/qshareddata.h:46,
                 from /usr/include/qt5/QtNetwork/qhostaddress.h:47,
                 from /usr/include/qt5/QtNetwork/QHostAddress:1,
                 from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:9,
                 from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/usr/include/qt5/QtCore/qhashfunctions.h:204:1: note: previous
definition of ‘struct std::hash<QString>’
  204 | QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_CREF(QString)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gmake[5]: *** [CMakeFiles/wsjt_qt.dir/build.make:106:
CMakeFiles/wsjt_qt.dir/qt_helpers.cpp.o] Error 1
gmake[5]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[4]: *** [CMakeFiles/Makefile2:822: CMakeFiles/wsjt_qt.dir/all] Error 2
gmake[4]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[3]: *** [Makefile:169: all] Error 2
gmake[3]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[2]: *** [CMakeFiles/wsjtx-build.dir/build.make:78:
wsjtx-prefix/src/wsjtx-stamp/wsjtx-build] Error 2
gmake[2]: Leaving directory '/home/n1ese/build'
gmake[1]: *** [CMakeFiles/Makefile2:405: CMakeFiles/wsjtx-build.dir/all] Error 2
gmake[1]: Leaving directory '/home/n1ese/build'
gmake: *** [Makefile:101: all] Error 2

Hi JT (?),

the following patch should get you going.

73
Bill
G4WJS.

commit f769f179c816a244f91dba359ad9e0a3eb234e0a
Author: Bill Somerville <bill@...>
Date:   Sat Feb 1 23:55:18 2020 +0000

    Remove std::hash<QString> specialization for Qt >= 5.14

diff --git a/qt_helpers.hpp b/qt_helpers.hpp
index b2ec7a49f..cf86f585b 100644
--- a/qt_helpers.hpp
+++ b/qt_helpers.hpp
@@ -78,6 +78,12 @@ public:
   }
 };

+#if QT_VERSION < QT_VERSION_CHECK (5, 14, 0)
+// The Qt  devs "fixed" this  in 5.14 to  specialize to use  their own
+// qHash(), it doesn't  fix the problem we were  addressing as qHash()
+// returns a  uint so is  still a  poorly distributed 32-bit  value on
+// 64-bit platforms, but  we can't specialize ourselves  as Qt already
+// has - sigh.
 namespace std
 {
   // std::hash<> specialization for QString based on the dbj2
@@ -97,6 +103,7 @@ namespace std
     }
   };
 }
+#endif

 // Register some useful Qt types with QMetaType
 Q_DECLARE_METATYPE (QHostAddress);



JT Croteau
 

Thanks Bill, it's been a long time since I last used patch files.
Could you please tell me how to apply this?

73 N1ESE

On Mon, Apr 13, 2020 at 1:02 AM Bill Somerville <g4wjs@...> wrote:

On 12/04/2020 20:24, JT Croteau wrote:

Friends, I'm trying to compile 2.1.2 on Linux arm64 but having an
issue. I'm wondering if anyone can help please? arm64 is a different
platform than armhf so I can't use the binary package on my Gentoo
system. Target hardware is a Raspberry Pi4B. Thanks

Failing here:

[ 69%] Building CXX object CMakeFiles/wsjt_qt.dir/qt_helpers.cpp.o
In file included from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp: In static
member function ‘static QVariant VPtr<T>::asQVariant(T*)’:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:77:61:
warning: ‘QVariant qVariantFromValue(const T&) [with T = void*]’ is
deprecated: Use QVariant::fromValue() instead.
[-Wdeprecated-declarations]
77 | return qVariantFromValue (reinterpret_cast<void *> (ptr));
| ^
In file included from /usr/include/qt5/QtCore/qlocale.h:43,
from /usr/include/qt5/QtCore/qtextstream.h:46,
from /usr/include/qt5/QtCore/qdebug.h:49,
from /usr/include/qt5/QtNetwork/qabstractsocket.h:47,
from /usr/include/qt5/QtNetwork/qhostaddress.h:48,
from /usr/include/qt5/QtNetwork/QHostAddress:1,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:9,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/usr/include/qt5/QtCore/qvariant.h:528:17: note: declared here
528 | inline QVariant qVariantFromValue(const T &t)
| ^~~~~~~~~~~~~~~~~
In file included from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp: At global scope:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:87:10: error:
redefinition of ‘struct std::hash<QString>’
87 | struct hash<QString>
| ^~~~~~~~~~~~~
In file included from /usr/include/qt5/QtCore/qlist.h:47,
from /usr/include/qt5/QtCore/qhash.h:46,
from /usr/include/qt5/QtCore/qshareddata.h:46,
from /usr/include/qt5/QtNetwork/qhostaddress.h:47,
from /usr/include/qt5/QtNetwork/QHostAddress:1,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:9,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/usr/include/qt5/QtCore/qhashfunctions.h:204:1: note: previous
definition of ‘struct std::hash<QString>’
204 | QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_CREF(QString)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gmake[5]: *** [CMakeFiles/wsjt_qt.dir/build.make:106:
CMakeFiles/wsjt_qt.dir/qt_helpers.cpp.o] Error 1
gmake[5]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[4]: *** [CMakeFiles/Makefile2:822: CMakeFiles/wsjt_qt.dir/all] Error 2
gmake[4]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[3]: *** [Makefile:169: all] Error 2
gmake[3]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[2]: *** [CMakeFiles/wsjtx-build.dir/build.make:78:
wsjtx-prefix/src/wsjtx-stamp/wsjtx-build] Error 2
gmake[2]: Leaving directory '/home/n1ese/build'
gmake[1]: *** [CMakeFiles/Makefile2:405: CMakeFiles/wsjtx-build.dir/all] Error 2
gmake[1]: Leaving directory '/home/n1ese/build'
gmake: *** [Makefile:101: all] Error 2

Hi JT (?),

the following patch should get you going.

73
Bill
G4WJS.

commit f769f179c816a244f91dba359ad9e0a3eb234e0a
Author: Bill Somerville <bill@...>
Date: Sat Feb 1 23:55:18 2020 +0000

Remove std::hash<QString> specialization for Qt >= 5.14

diff --git a/qt_helpers.hpp b/qt_helpers.hpp
index b2ec7a49f..cf86f585b 100644
--- a/qt_helpers.hpp
+++ b/qt_helpers.hpp
@@ -78,6 +78,12 @@ public:
}
};

+#if QT_VERSION < QT_VERSION_CHECK (5, 14, 0)
+// The Qt devs "fixed" this in 5.14 to specialize to use their own
+// qHash(), it doesn't fix the problem we were addressing as qHash()
+// returns a uint so is still a poorly distributed 32-bit value on
+// 64-bit platforms, but we can't specialize ourselves as Qt already
+// has - sigh.
namespace std
{
// std::hash<> specialization for QString based on the dbj2
@@ -97,6 +103,7 @@ namespace std
}
};
}
+#endif

// Register some useful Qt types with QMetaType
Q_DECLARE_METATYPE (QHostAddress);



JT Croteau
 

Bill, ignore my previous,. I remembered how to do it. Compiling now
and past the qt_helper stage.

73 N1ESE

On Mon, Apr 13, 2020 at 3:27 PM JT Croteau via groups.io
<jt.tobit@...> wrote:

Thanks Bill, it's been a long time since I last used patch files.
Could you please tell me how to apply this?

73 N1ESE

On Mon, Apr 13, 2020 at 1:02 AM Bill Somerville <g4wjs@...> wrote:

On 12/04/2020 20:24, JT Croteau wrote:

Friends, I'm trying to compile 2.1.2 on Linux arm64 but having an
issue. I'm wondering if anyone can help please? arm64 is a different
platform than armhf so I can't use the binary package on my Gentoo
system. Target hardware is a Raspberry Pi4B. Thanks

Failing here:

[ 69%] Building CXX object CMakeFiles/wsjt_qt.dir/qt_helpers.cpp.o
In file included from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp: In static
member function ‘static QVariant VPtr<T>::asQVariant(T*)’:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:77:61:
warning: ‘QVariant qVariantFromValue(const T&) [with T = void*]’ is
deprecated: Use QVariant::fromValue() instead.
[-Wdeprecated-declarations]
77 | return qVariantFromValue (reinterpret_cast<void *> (ptr));
| ^
In file included from /usr/include/qt5/QtCore/qlocale.h:43,
from /usr/include/qt5/QtCore/qtextstream.h:46,
from /usr/include/qt5/QtCore/qdebug.h:49,
from /usr/include/qt5/QtNetwork/qabstractsocket.h:47,
from /usr/include/qt5/QtNetwork/qhostaddress.h:48,
from /usr/include/qt5/QtNetwork/QHostAddress:1,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:9,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/usr/include/qt5/QtCore/qvariant.h:528:17: note: declared here
528 | inline QVariant qVariantFromValue(const T &t)
| ^~~~~~~~~~~~~~~~~
In file included from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp: At global scope:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:87:10: error:
redefinition of ‘struct std::hash<QString>’
87 | struct hash<QString>
| ^~~~~~~~~~~~~
In file included from /usr/include/qt5/QtCore/qlist.h:47,
from /usr/include/qt5/QtCore/qhash.h:46,
from /usr/include/qt5/QtCore/qshareddata.h:46,
from /usr/include/qt5/QtNetwork/qhostaddress.h:47,
from /usr/include/qt5/QtNetwork/QHostAddress:1,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:9,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/usr/include/qt5/QtCore/qhashfunctions.h:204:1: note: previous
definition of ‘struct std::hash<QString>’
204 | QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_CREF(QString)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gmake[5]: *** [CMakeFiles/wsjt_qt.dir/build.make:106:
CMakeFiles/wsjt_qt.dir/qt_helpers.cpp.o] Error 1
gmake[5]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[4]: *** [CMakeFiles/Makefile2:822: CMakeFiles/wsjt_qt.dir/all] Error 2
gmake[4]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[3]: *** [Makefile:169: all] Error 2
gmake[3]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[2]: *** [CMakeFiles/wsjtx-build.dir/build.make:78:
wsjtx-prefix/src/wsjtx-stamp/wsjtx-build] Error 2
gmake[2]: Leaving directory '/home/n1ese/build'
gmake[1]: *** [CMakeFiles/Makefile2:405: CMakeFiles/wsjtx-build.dir/all] Error 2
gmake[1]: Leaving directory '/home/n1ese/build'
gmake: *** [Makefile:101: all] Error 2

Hi JT (?),

the following patch should get you going.

73
Bill
G4WJS.

commit f769f179c816a244f91dba359ad9e0a3eb234e0a
Author: Bill Somerville <bill@...>
Date: Sat Feb 1 23:55:18 2020 +0000

Remove std::hash<QString> specialization for Qt >= 5.14

diff --git a/qt_helpers.hpp b/qt_helpers.hpp
index b2ec7a49f..cf86f585b 100644
--- a/qt_helpers.hpp
+++ b/qt_helpers.hpp
@@ -78,6 +78,12 @@ public:
}
};

+#if QT_VERSION < QT_VERSION_CHECK (5, 14, 0)
+// The Qt devs "fixed" this in 5.14 to specialize to use their own
+// qHash(), it doesn't fix the problem we were addressing as qHash()
+// returns a uint so is still a poorly distributed 32-bit value on
+// 64-bit platforms, but we can't specialize ourselves as Qt already
+// has - sigh.
namespace std
{
// std::hash<> specialization for QString based on the dbj2
@@ -97,6 +103,7 @@ namespace std
}
};
}
+#endif

// Register some useful Qt types with QMetaType
Q_DECLARE_METATYPE (QHostAddress);



JT Croteau
 

Sucess! Thank you so much Bill.

# file wsjtx
wsjtx: ELF 64-bit LSB shared object, ARM aarch64, version 1
(GNU/Linux), dynamically linked, interpreter
/lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, not stripped

73 N1ESE

On Mon, Apr 13, 2020 at 3:49 PM JT Croteau via groups.io
<jt.tobit@...> wrote:

Bill, ignore my previous,. I remembered how to do it. Compiling now
and past the qt_helper stage.

73 N1ESE

On Mon, Apr 13, 2020 at 3:27 PM JT Croteau via groups.io
<jt.tobit@...> wrote:

Thanks Bill, it's been a long time since I last used patch files.
Could you please tell me how to apply this?

73 N1ESE

On Mon, Apr 13, 2020 at 1:02 AM Bill Somerville <g4wjs@...> wrote:

On 12/04/2020 20:24, JT Croteau wrote:

Friends, I'm trying to compile 2.1.2 on Linux arm64 but having an
issue. I'm wondering if anyone can help please? arm64 is a different
platform than armhf so I can't use the binary package on my Gentoo
system. Target hardware is a Raspberry Pi4B. Thanks

Failing here:

[ 69%] Building CXX object CMakeFiles/wsjt_qt.dir/qt_helpers.cpp.o
In file included from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp: In static
member function ‘static QVariant VPtr<T>::asQVariant(T*)’:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:77:61:
warning: ‘QVariant qVariantFromValue(const T&) [with T = void*]’ is
deprecated: Use QVariant::fromValue() instead.
[-Wdeprecated-declarations]
77 | return qVariantFromValue (reinterpret_cast<void *> (ptr));
| ^
In file included from /usr/include/qt5/QtCore/qlocale.h:43,
from /usr/include/qt5/QtCore/qtextstream.h:46,
from /usr/include/qt5/QtCore/qdebug.h:49,
from /usr/include/qt5/QtNetwork/qabstractsocket.h:47,
from /usr/include/qt5/QtNetwork/qhostaddress.h:48,
from /usr/include/qt5/QtNetwork/QHostAddress:1,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:9,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/usr/include/qt5/QtCore/qvariant.h:528:17: note: declared here
528 | inline QVariant qVariantFromValue(const T &t)
| ^~~~~~~~~~~~~~~~~
In file included from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp: At global scope:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:87:10: error:
redefinition of ‘struct std::hash<QString>’
87 | struct hash<QString>
| ^~~~~~~~~~~~~
In file included from /usr/include/qt5/QtCore/qlist.h:47,
from /usr/include/qt5/QtCore/qhash.h:46,
from /usr/include/qt5/QtCore/qshareddata.h:46,
from /usr/include/qt5/QtNetwork/qhostaddress.h:47,
from /usr/include/qt5/QtNetwork/QHostAddress:1,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:9,
from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/usr/include/qt5/QtCore/qhashfunctions.h:204:1: note: previous
definition of ‘struct std::hash<QString>’
204 | QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_CREF(QString)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gmake[5]: *** [CMakeFiles/wsjt_qt.dir/build.make:106:
CMakeFiles/wsjt_qt.dir/qt_helpers.cpp.o] Error 1
gmake[5]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[4]: *** [CMakeFiles/Makefile2:822: CMakeFiles/wsjt_qt.dir/all] Error 2
gmake[4]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[3]: *** [Makefile:169: all] Error 2
gmake[3]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[2]: *** [CMakeFiles/wsjtx-build.dir/build.make:78:
wsjtx-prefix/src/wsjtx-stamp/wsjtx-build] Error 2
gmake[2]: Leaving directory '/home/n1ese/build'
gmake[1]: *** [CMakeFiles/Makefile2:405: CMakeFiles/wsjtx-build.dir/all] Error 2
gmake[1]: Leaving directory '/home/n1ese/build'
gmake: *** [Makefile:101: all] Error 2

Hi JT (?),

the following patch should get you going.

73
Bill
G4WJS.

commit f769f179c816a244f91dba359ad9e0a3eb234e0a
Author: Bill Somerville <bill@...>
Date: Sat Feb 1 23:55:18 2020 +0000

Remove std::hash<QString> specialization for Qt >= 5.14

diff --git a/qt_helpers.hpp b/qt_helpers.hpp
index b2ec7a49f..cf86f585b 100644
--- a/qt_helpers.hpp
+++ b/qt_helpers.hpp
@@ -78,6 +78,12 @@ public:
}
};

+#if QT_VERSION < QT_VERSION_CHECK (5, 14, 0)
+// The Qt devs "fixed" this in 5.14 to specialize to use their own
+// qHash(), it doesn't fix the problem we were addressing as qHash()
+// returns a uint so is still a poorly distributed 32-bit value on
+// 64-bit platforms, but we can't specialize ourselves as Qt already
+// has - sigh.
namespace std
{
// std::hash<> specialization for QString based on the dbj2
@@ -97,6 +103,7 @@ namespace std
}
};
}
+#endif

// Register some useful Qt types with QMetaType
Q_DECLARE_METATYPE (QHostAddress);



Dave Carlton
 

I had that same error on the MAC, I edited the file and commented out the duplicate.

On Apr 12, 2020, at 17:02, Bill Somerville <g4wjs@...> wrote:

On 12/04/2020 20:24, JT Croteau wrote:
Friends, I'm trying to compile 2.1.2 on Linux arm64 but having an
issue.  I'm wondering if anyone can help please?  arm64 is a different
platform than armhf so I can't use the binary package on my Gentoo
system.  Target hardware is a Raspberry Pi4B. Thanks

Failing here:

[ 69%] Building CXX object CMakeFiles/wsjt_qt.dir/qt_helpers.cpp.o
In file included from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp: In static
member function ‘static QVariant VPtr<T>::asQVariant(T*)’:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:77:61:
warning: ‘QVariant qVariantFromValue(const T&) [with T = void*]’ is
deprecated: Use QVariant::fromValue() instead.
[-Wdeprecated-declarations]
   77 |     return qVariantFromValue (reinterpret_cast<void *> (ptr));
      |                                                             ^
In file included from /usr/include/qt5/QtCore/qlocale.h:43,
                 from /usr/include/qt5/QtCore/qtextstream.h:46,
                 from /usr/include/qt5/QtCore/qdebug.h:49,
                 from /usr/include/qt5/QtNetwork/qabstractsocket.h:47,
                 from /usr/include/qt5/QtNetwork/qhostaddress.h:48,
                 from /usr/include/qt5/QtNetwork/QHostAddress:1,
                 from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:9,
                 from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/usr/include/qt5/QtCore/qvariant.h:528:17: note: declared here
  528 | inline QVariant qVariantFromValue(const T &t)
      |                 ^~~~~~~~~~~~~~~~~
In file included from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp: At global scope:
/home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:87:10: error:
redefinition of ‘struct std::hash<QString>’
   87 |   struct hash<QString>
      |          ^~~~~~~~~~~~~
In file included from /usr/include/qt5/QtCore/qlist.h:47,
                 from /usr/include/qt5/QtCore/qhash.h:46,
                 from /usr/include/qt5/QtCore/qshareddata.h:46,
                 from /usr/include/qt5/QtNetwork/qhostaddress.h:47,
                 from /usr/include/qt5/QtNetwork/QHostAddress:1,
                 from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.hpp:9,
                 from /home/n1ese/build/wsjtx-prefix/src/wsjtx/qt_helpers.cpp:1:
/usr/include/qt5/QtCore/qhashfunctions.h:204:1: note: previous
definition of ‘struct std::hash<QString>’
  204 | QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_CREF(QString)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gmake[5]: *** [CMakeFiles/wsjt_qt.dir/build.make:106:
CMakeFiles/wsjt_qt.dir/qt_helpers.cpp.o] Error 1
gmake[5]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[4]: *** [CMakeFiles/Makefile2:822: CMakeFiles/wsjt_qt.dir/all] Error 2
gmake[4]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[3]: *** [Makefile:169: all] Error 2
gmake[3]: Leaving directory '/home/n1ese/build/wsjtx-prefix/src/wsjtx-build'
gmake[2]: *** [CMakeFiles/wsjtx-build.dir/build.make:78:
wsjtx-prefix/src/wsjtx-stamp/wsjtx-build] Error 2
gmake[2]: Leaving directory '/home/n1ese/build'
gmake[1]: *** [CMakeFiles/Makefile2:405: CMakeFiles/wsjtx-build.dir/all] Error 2
gmake[1]: Leaving directory '/home/n1ese/build'
gmake: *** [Makefile:101: all] Error 2

Hi JT (?),

the following patch should get you going.

73
Bill
G4WJS.

commit f769f179c816a244f91dba359ad9e0a3eb234e0a
Author: Bill Somerville <bill@...>
Date:   Sat Feb 1 23:55:18 2020 +0000

    Remove std::hash<QString> specialization for Qt >= 5.14

diff --git a/qt_helpers.hpp b/qt_helpers.hpp
index b2ec7a49f..cf86f585b 100644
--- a/qt_helpers.hpp
+++ b/qt_helpers.hpp
@@ -78,6 +78,12 @@ public:
   }
 };

+#if QT_VERSION < QT_VERSION_CHECK (5, 14, 0)
+// The Qt  devs "fixed" this  in 5.14 to  specialize to use  their own
+// qHash(), it doesn't  fix the problem we were  addressing as qHash()
+// returns a  uint so is  still a  poorly distributed 32-bit  value on
+// 64-bit platforms, but  we can't specialize ourselves  as Qt already
+// has - sigh.
 namespace std
 {
   // std::hash<> specialization for QString based on the dbj2
@@ -97,6 +103,7 @@ namespace std
     }
   };
 }
+#endif

 // Register some useful Qt types with QMetaType
 Q_DECLARE_METATYPE (QHostAddress);





Bill Somerville
 

On 13/04/2020 15:58, JT Croteau wrote:
Sucess! Thank you so much Bill.

# file wsjtx
wsjtx: ELF 64-bit LSB shared object, ARM aarch64, version 1
(GNU/Linux), dynamically linked, interpreter
/lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, not stripped

73 N1ESE
Hi JT,

well done! What Linux distribution are you using?

73
Bill
G4WJS.


JT Croteau
 

Bill, I'm running Gentoo.


On Mon, Apr 13, 2020, 3:20 PM Bill Somerville <g4wjs@...> wrote:
On 13/04/2020 15:58, JT Croteau wrote:
> Sucess!  Thank you so much Bill.
>
> # file wsjtx
> wsjtx: ELF 64-bit LSB shared object, ARM aarch64, version 1
> (GNU/Linux), dynamically linked, interpreter
> /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, not stripped
>
> 73 N1ESE

Hi JT,

well done! What Linux distribution are you using?

73
Bill
G4WJS.



JT Croteau
 

Bill, I sent an email to the Gentoo package maintainer for WSJT-X asking him to incorporate this patch.

73 N1ESE

On Mon, Apr 13, 2020, 5:07 PM JT Croteau via groups.io <jt.tobit=gmail.com@groups.io> wrote:
Bill, I'm running Gentoo.

On Mon, Apr 13, 2020, 3:20 PM Bill Somerville <g4wjs@...> wrote:
On 13/04/2020 15:58, JT Croteau wrote:
> Sucess!  Thank you so much Bill.
>
> # file wsjtx
> wsjtx: ELF 64-bit LSB shared object, ARM aarch64, version 1
> (GNU/Linux), dynamically linked, interpreter
> /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, not stripped
>
> 73 N1ESE

Hi JT,

well done! What Linux distribution are you using?

73
Bill
G4WJS.