On Wed, Aug 22, 2012 at 9:22 PM, Rich Mattes <richmattes(a)gmail.com> wrote:
Hi,
I'm trying to rebuild one of my packages (mrpt), and I'm running into a TLS
mismatch error that I am having issues troubleshooting. The offending build
is at
https://koji.fedoraproject.org/koji/taskinfo?taskID=4412122
The problem symbol demangles to
Eigen::internal::manage_caching_sizes(Eigen::Action, int*,
int*)::m_l1CacheSize, which is in
<eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h>:
inline void manage_caching_sizes(Action action, std::ptrdiff_t* l1=0,
std::ptrdiff_t* l2=0)
{
static std::ptrdiff_t m_l1CacheSize = 0;
static std::ptrdiff_t m_l2CacheSize = 0;
#ifdef _OPENMP
#pragma omp threadprivate(m_l1CacheSize,m_l2CacheSize)
#endif
So when building with OpenMP support, those two static variables are
declared to be thread-private (i.e., to use Thread Local Storage, or
TLS). Your problem is that you are trying to link a PCL library built
with OpenMP with mrpt that has not been built with OpenMP, so its
versions of those static variables are non-TLS.
Bottom line: either both PCL and mrpt have to be built with OpenMP
support, or neither of them can be.
You've got a couple of other problems here. One is that you are
building with SSE3 support. Even on x86_64, you can't be sure that
all clients have that. I think you need to add this to your cmake
invocation:
%ifnarch x86_64
-DDISABLE_SSE2=ON \
%endif
-DDISABLE_SSE3=ON \
Also, cmake complains about not being able to find a suitesparse
algorithm, which is remedied by adding a suitesparse-devel BR.
Regards,
--
Jerry James
http://www.jamezone.org/