Ubuntu20.04 cmake最终解决找不到zstd
模块
出现的问题
终端显示
CMake Error at CMakeLists.txt:18 (ADD_LIBRARY):
Target "FEDI" links to target "PkgConfig::libzstd" but the target was not
found. Perhaps a find_package() call is missing for an IMPORTED target, or
an ALIAS target is missing?
cmakeError.log部分显示
Performing C SOURCE FILE Test CMAKE_HAVE_LIBC_PTHREAD failed with the following output:
Change Dir: /media/lihatoo/LHT/afile/akang/fast_EDI/dv-module/fast-edi/build/CMakeFiles/CMakeTmp
Run Build Command(s):/usr/bin/make -f Makefile cmTC_6de1b/fast && /usr/bin/make -f CMakeFiles/cmTC_6de1b.dir/build.make CMakeFiles/cmTC_6de1b.dir/build
make[1]: 进入目录“/media/lihatoo/LHT/afile/akang/fast_EDI/dv-module/fast-edi/build/CMakeFiles/CMakeTmp”
Building C object CMakeFiles/cmTC_6de1b.dir/src.c.o
/usr/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD -o CMakeFiles/cmTC_6de1b.dir/src.c.o -c /media/lihatoo/LHT/afile/akang/fast_EDI/dv-module/fast-edi/build/CMakeFiles/CMakeTmp/src.c
Linking C executable cmTC_6de1b
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6de1b.dir/link.txt --verbose=1
/usr/bin/cc CMakeFiles/cmTC_6de1b.dir/src.c.o -o cmTC_6de1b
/usr/bin/ld: CMakeFiles/cmTC_6de1b.dir/src.c.o: in function `main':
src.c:(.text+0x46): undefined reference to `pthread_create'
/usr/bin/ld: src.c:(.text+0x52): undefined reference to `pthread_detach'
/usr/bin/ld: src.c:(.text+0x5e): undefined reference to `pthread_cancel'
/usr/bin/ld: src.c:(.text+0x6f): undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status
make[1]: *** [CMakeFiles/cmTC_6de1b.dir/build.make:99:cmTC_6de1b] 错误 1
make[1]: 离开目录“/media/lihatoo/LHT/afile/akang/fast_EDI/dv-module/fast-edi/build/CMakeFiles/CMakeTmp”
make: *** [Makefile:127:cmTC_6de1b/fast] 错误 2
解决
首先试试直接改代码可不可以,不可以重装试试,这里给出重装步骤,已成功
-
首先试试了重新安装相应模块
确认可以之后 -
删除libzstd1与libzstd-dev模块
可以直接最后的强制删除
sudo apt-get remove --purge libzstd-dev libzstd1
不行,依赖项多杂有限制
sudo apt-get autoremove
先清一下不需要的包
sudo apt-get check
检查一下冲突,有冲突包也删除就行
sudo dpkg --remove --force-depends libzstd-dev libzstd1
强制删除即可
- 重装libzstd1与libzstd-dev
无法使用apt-get安装,在https://ubuntu.pkgs.org/20.04/ubuntu-updates-main-amd64/libzstd1_1.4.4+dfsg-3ubuntu0.1_amd64.deb.html
上找到.deb的网址使用指令wget http://archive.ubuntu.com/ubuntu/pool/main/libz/libzstd/libzstd-dev_1.4.4+dfsg-3ubuntu0.1_amd64.deb
下载deb即可,同样可以找到libzstd1即可wget http://archive.ubuntu.com/ubuntu/pool/main/libz/libzstd/libzstd1_1.4.4+dfsg-3ubuntu0.1_amd64.deb
先安装libzstd1,后安装libzstd-dev
安装libzstd1
ar x libzstd1_1.4.4+dfsg-3ubuntu0.1_amd64.deb
sudo tar xvf data.tar.xz -C /
ls /usr/lib/x86_64-linux-gnu/libzstd.so.1#用来验证的
dpkg -s libzstd1#也可以用来验证
安装libzstd-dev
sudo apt-get clean
sudo apt-get autoclean#清理一下安装缓存
sudo dpkg --force-all -i libzstd-dev_1.4.4+dfsg-3ubuntu0.1_amd64.deb#强制安装,不需要的话可以只是去掉--force-all
dpkg -s libzstd-dev#检查,可
重新执行cmake
错误重复,添加类似代码
# Init CMake (require at least version 3.10.0)
CMAKE_MINIMUM_REQUIRED(VERSION 3.10.0)
# Project name and version
PROJECT(fast-edi
VERSION 1.0.0
LANGUAGES C CXX)
# Define installation paths
INCLUDE(GNUInstallDirs)
# find_package(Boost REQUIRED COMPONENTS filesystem)
FIND_PACKAGE(dv-processing 1.7.9 REQUIRED)#1.7.9-1~focal
FIND_PACKAGE(dv 1.6.2 REQUIRED)#1.6.2-1~focal
find_package(PkgConfig REQUIRED)#添加的
pkg_check_modules(LIBZSTD REQUIRED IMPORTED_TARGET libzstd)#添加的
find_library(LIBZSTD_LIBRARY NAMES zstd libzstd)#添加的
if(NOT LIBZSTD_LIBRARY)#添加的
message(FATAL_ERROR "Could not find the libzstd library")
endif()#添加的
add_library(PkgConfig::libzstd UNKNOWN IMPORTED)#添加的
set_target_properties(PkgConfig::libzstd PROPERTIES#添加的
IMPORTED_LOCATION ${LIBZSTD_LIBRARY}#添加的
)#添加的
# Compile this module (standard C++ file, no additional dependencies)
ADD_LIBRARY(FEDI SHARED FEDI.cpp)
SET_TARGET_PROPERTIES(FEDI
PROPERTIES
PREFIX "fedi_"
)
TARGET_LINK_LIBRARIES(FEDI PRIVATE dv::sdk)
target_link_libraries(FEDI PRIVATE PkgConfig::libzstd)#添加的
INSTALL(TARGETS FEDI DESTINATION ${DV_MODULES_DIR})