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" )