Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake:向导入的库添加依赖项_C++_Cmake - Fatal编程技术网

C++ CMake:向导入的库添加依赖项

C++ CMake:向导入的库添加依赖项,c++,cmake,C++,Cmake,我有一个供应商提供的库存档,我已将其导入到我的项目中: add_library( lib_foo STATIC IMPORTED GLOBAL ) set_target_properties( lib_foo PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_LIST_DIR}/vendor/foo.a" ) set_target_properties(

我有一个供应商提供的库存档,我已将其导入到我的项目中:

add_library(
    lib_foo 
    STATIC 
    IMPORTED GLOBAL
    )

set_target_properties(
    lib_foo 
    PROPERTIES IMPORTED_LOCATION             
    "${CMAKE_CURRENT_LIST_DIR}/vendor/foo.a"
    )

set_target_properties(
    lib_foo 
    PROPERTIES INTERFACE_INCLUDE_DIRECTORIES 
    "${CMAKE_CURRENT_LIST_DIR}/vendor"
    )
当我尝试使用此库链接应用程序时,会得到对“pthread_atfork”的
未定义引用
链接器错误:

/usr/lib/libtcmalloc_minimal.a(libtcmalloc_minimal_internal_la-static_vars.o):
    In function `SetupAtForkLocksHandler':
    /tmp/gperftools-2.4/src/static_vars.cc:119: 
        undefined reference to `pthread_atfork'
        ../vendor/foo.a(platformLib.o): In function `foo::Thread::Impl::join()':
因此
vendor/foo.a
依赖于
pthread

我尝试了
target\u link\u库(lib\u foo pthread)
,但这不起作用,因为
lib\u foo
是导入的目标,而不是构建的目标

问题: 如何将
pthread
链接到
lib\u foo
,或指定依赖于
lib\u foo
的目标也依赖于pthread?

导入的链接接口库: 您还可以设置一个附加的目标属性

导入的
目标的可传递链接接口

将此设置为在
导入的
库目标链接到另一个目标

库将包含在目标的链接行中

LINK\u INTERFACE\u LIBRARIES
属性不同,此属性适用于所有导入的目标类型,包括
STATIC

-pthread编译器标志: 但是,在这种特殊情况下,
pthread
链接问题可能会通过向编译器标志中添加
-pthread
来解决

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread" )
man gcc

-pthread
使用pthreads库添加了对多线程的支持。此选项设置预处理器和链接器的标志

它使文件使用
-D_REENTRANT
编译,并与-
lpthread
链接。在其他平台上,这可能有所不同。使用
-pthread
实现最大的可移植性


在CMake 3.14
中,此属性已被弃用。改用界面链接库。
set_target_properties(lib_foo 
    PROPERTIES IMPORTED_LINK_INTERFACE_LIBRARIES 
    pthread
    )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread" )