https://bugs.kde.org/show_bug.cgi?id=435155
Bug ID: 435155
Summary: Heaptrack 1.2.0 fails to build with libunwind 1.5.0
Product: Heaptrack
Version: 1.2.0
Platform: Compiled Sources
OS: Linux
Status: REPORTED
Severity: normal
Priority: NOR
Component: general
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ---
SUMMARY
Heaptrack 1.2.0 fails to build when using a static version of libunwind 1.5.0
STEPS TO REPRODUCE
1. A clean source build of libunwind 1.5.0 prefixed to /heaptrack/build (with
the configure options of "--disable-shared --enable-static --disable-coredump
--disable-documentation --prefix=/heaptrack/build")
2. curl -L -O https://github.com/KDE/heaptrack/archive/v1.2.0.tar.gz && tar
-xzf v1.2.0.tar.gz && cd heaptrack-1.2.0 && mkdir build && cd build
3. PKG_CONFIG_PATH="/heaptrack/build/lib/pkgconfig" cmake
-DCMAKE_BUILD_TYPE=Release -DHEAPTRACK_BUILD_PRINT=OFF -DHEAPTRACK_BUILD_GUI=ON
-DCMAKE_INSTALL_PREFIX=/heaptrack/build ..
4. make && make install
OBSERVED RESULT
Cmake fails with the cryptic "libunwind is missing" error:
-- The following REQUIRED packages have not been found:
* Libunwind
CMake Error at /usr/share/cmake/Modules/FeatureSummary.cmake:430 (message):
feature_summary() Error: REQUIRED package(s) are missing, aborting CMake
run.
Call Stack (most recent call first):
CMakeLists.txt:151 (feature_summary)
The following errors appears in the config output:
...
-- Performing Test LIBUNWIND_HAS_UNW_GETCONTEXT
-- Performing Test LIBUNWIND_HAS_UNW_GETCONTEXT - Success
-- Performing Test LIBUNWIND_HAS_UNW_INIT_LOCAL
-- Performing Test LIBUNWIND_HAS_UNW_INIT_LOCAL - Failed
-- Performing Test LIBUNWIND_HAS_UNW_BACKTRACE
-- Performing Test LIBUNWIND_HAS_UNW_BACKTRACE - Failed
-- Performing Test LIBUNWIND_HAS_UNW_BACKTRACE_SKIP
-- Performing Test LIBUNWIND_HAS_UNW_BACKTRACE_SKIP - Failed
-- Performing Test LIBUNWIND_HAS_UNW_SET_CACHE_SIZE
-- Performing Test LIBUNWIND_HAS_UNW_SET_CACHE_SIZE - Failed
-- Could NOT find LibUnwind (missing: LIBUNWIND_HAS_UNW_BACKTRACE) (found
version "1.5")
...
CMakeError.log shows the following errors (among others):
...
Performing C SOURCE FILE Test LIBUNWIND_HAS_UNW_BACKTRACE failed with the
following output:
Change Dir: /heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp
Run Build Command:/usr/bin/gmake "cmTryCompileExec3966086559/fast"
/usr/bin/gmake -f CMakeFiles/cmTryCompileExec3966086559.dir/build.make
CMakeFiles/cmTryCompileExec3966086559.dir/build
gmake[1]: Entering directory
`/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp'
/usr/bin/cmake -E cmake_progress_report
/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp/CMakeFiles 1
Building C object CMakeFiles/cmTryCompileExec3966086559.dir/src.c.o
/usr/bin/cc -DLIBUNWIND_HAS_UNW_BACKTRACE -I/heaptrack/build/include -o
CMakeFiles/cmTryCompileExec3966086559.dir/src.c.o -c
/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp/src.c
/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp/src.c: In function
'main':
/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp/src.c:3:1: warning:
passing argument 1 of 'unw_backtrace' from incompatible pointer type [enabled
by default]
int main() { void* buf[10]; unw_backtrace(&buf, 10); return 0; }
^
In file included from /heaptrack/build/include/libunwind-x86_64.h:129:0,
from /heaptrack/build/include/libunwind.h:25,
from
/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp/src.c:2:
/heaptrack/build/include/libunwind-common.h:290:12: note: expected 'void **'
but argument is of type 'void * (*)[10]'
extern int unw_backtrace (void **, int);
^
Linking C executable cmTryCompileExec3966086559
/usr/bin/cmake -E cmake_link_script
CMakeFiles/cmTryCompileExec3966086559.dir/link.txt --verbose=1
/usr/bin/cc -DLIBUNWIND_HAS_UNW_BACKTRACE
CMakeFiles/cmTryCompileExec3966086559.dir/src.c.o -o
cmTryCompileExec3966086559 -rdynamic /heaptrack/build/lib/libunwind.a
/heaptrack/build/lib/libunwind.a(elf64.o): In function `xz_uncompressed_size':
elf64.c:(.text+0x608): undefined reference to `lzma_stream_footer_decode'
elf64.c:(.text+0x66d): undefined reference to `lzma_index_buffer_decode'
elf64.c:(.text+0x684): undefined reference to `lzma_index_size'
elf64.c:(.text+0x699): undefined reference to `lzma_index_uncompressed_size'
elf64.c:(.text+0x6ae): undefined reference to `lzma_index_end'
/heaptrack/build/lib/libunwind.a(elf64.o): In function
`_Uelf64_extract_minidebuginfo':
elf64.c:(.text+0x7f3): undefined reference to `lzma_stream_buffer_decode'
collect2: error: ld returned 1 exit status
gmake[1]: *** [cmTryCompileExec3966086559] Error 1
gmake[1]: Leaving directory
`/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp'
gmake: *** [cmTryCompileExec3966086559/fast] Error 2
Source file was:
#define UNW_LOCAL_ONLY 1
#include <libunwind.h>
int main() { void* buf[10]; unw_backtrace(&buf, 10); return 0; }
...
EXPECTED RESULT
A successful heaptrack build
SOFTWARE/OS VERSIONS
Linux/KDE Plasma: CentOS 7.9 on an x86_64 system via Docker
ADDITIONAL INFORMATION
Apparently the cmake module FindLibunwind fails to find liblzma on its own,
which is all the more puzzling given the fact that pkg-config finds it without
any problems whatsoever:
[root@1fb759bd1336 build]# pkg-config --libs liblzma
-llzma
[root@1fb759bd1336 build]#
My solution to the problem was to simply "substitute in" the name of the
library into the flags for the CHECK_C_SOURCE_COMPILES macro via sed:
sed -i "s/CMAKE_REQUIRED_LIBRARIES
\${LIBUNWIND_LIBRARY}/CMAKE_REQUIRED_LIBRARIES \${LIBUNWIND_LIBRARY} lzma/"
cmake/FindLibunwind.cmake
After that the compilation went through fine without any problems whatsoever
--
You are receiving this mail because:
You are watching all bug changes.