我已经下载并安装了libtar。
我已正确添加头文件(#include <libtar.h>
)。
我使用KDevelop,当我开始输入时,它会自动识别 tar_append_tree 和 tar_open 这两个函数。
我将cmake与KDevelop一起使用(作为创建新项目时的一个选项),到目前为止,所有我需要做的就是在CMAKE_EXE_LINKER_FLAGS中添加相应的标志。我知道libtar需要 -ltar 才能工作,但我仍然得到:对tar_open的未定义引用,对tar_append_tree的未定义引用。
有人可以帮忙吗?我不知道任何其他tar库,我真的需要在压缩之前在tarball中组织数千个xml文件。
编辑:我现在发现libarchive应该比libtar好得多。但是我在这里遗漏了一些东西。如何明确告诉KDevelop / Cmake如何链接这些库? libarchive没有链接标志(至少不是我在谷歌上找到的),而且当我尝试编译时,我得到了对导入函数的未定义引用。
谢谢!
答案 0 :(得分:2)
我确信不止一个解决方案,但这是我的。我创建了两个文件
FindLIBTAR.cmake
位于cmake/Modules/
libtar.pc
中/usr/lib/pkgconfig
# - Try to find LIBTAR
# Find LIBTAR headers, libraries and the answer to all questions.
#
# LIBTAR_FOUND True if libuuid got found
# LIBTAR_INCLUDE_DIRS Location of libuuid headers
# LIBTAR_LIBRARIES List of libraries to use libuuid
#
INCLUDE( FindPkgConfig )
IF ( LIBTAR_FIND_REQUIRED )
SET( _pkgconfig_REQUIRED "REQUIRED" )
ELSE ( LIBTAR_FIND_REQUIRED )
SET( _pkgconfig_REQUIRED "" )
ENDIF ( LIBTAR_FIND_REQUIRED )
IF ( LIBTAR_MIN_VERSION )
PKG_SEARCH_MODULE( LIBTAR ${_pkgconfig_REQUIRED} libtar>=${LIBTAR_MIN_VERSION} )
ELSE ( LIBTAR_MIN_VERSION )
PKG_SEARCH_MODULE( LIBTAR ${_pkgconfig_REQUIRED} libtar )
ENDIF ( LIBTAR_MIN_VERSION )
IF( NOT LIBTAR_FOUND AND NOT PKG_CONFIG_FOUND )
FIND_PATH( LIBTAR_INCLUDE_DIRS libtar.h )
FIND_LIBRARY( LIBTAR_LIBRARIES libtar)
# Report results
IF ( LIBTAR_LIBRARIES AND LIBTAR_INCLUDE_DIRS )
SET( LIBTAR_FOUND 1 )
IF ( NOT LIBTAR_FIND_QUIETLY )
MESSAGE( STATUS "Found libtar: ${LIBTAR_LIBRARIES}" )
ENDIF ( NOT LIBTAR_FIND_QUIETLY )
ELSE ( LIBTAR_LIBRARIES AND LIBTAR_INCLUDE_DIRS )
IF ( LIBTAR_FIND_REQUIRED )
MESSAGE( SEND_ERROR "Could NOT find libtar" )
ELSE ( LIBTAR_FIND_REQUIRED )
IF ( NOT LIBTAR_FIND_QUIETLY )
MESSAGE( STATUS "Could NOT find libtar" )
ENDIF ( NOT LIBTAR_FIND_QUIETLY )
ENDIF ( LIBTAR_FIND_REQUIRED )
ENDIF ( LIBTAR_LIBRARIES AND LIBTAR_INCLUDE_DIRS )
ENDIF( NOT LIBTAR_FOUND AND NOT PKG_CONFIG_FOUND )
MARK_AS_ADVANCED( LIBTAR_LIBRARIES LIBTAR_INCLUDE_DIRS )
###########################################################################
# libtar installation details
###########################################################################
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: libtar
URL: http://www.feep.net/libtar/
Description: Library for Tar files
Version: 1.2.11-8
Libs: -L${libdir} -ltar -Wl,-Bsymbolic-functions -Wl,-z,relro
Libs.private:
Cflags: -I${includedir}
FindLIBTAR.cmake
使用 pkgconfig 查找libtar
库, pkgconfig 使用libtar.pc
查找库。如果您不想将cmake文件放在项目目录中,可以将cmake文件放在CMake放置所有查找文件(/usr/share/cmake/Modules/
)的相同位置。如果您将其保留在项目的文件夹中,则需要通过以下方式将其添加到CMAKE_MODULE_PATH
:
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules/")