CMake链接到子shell的结果

时间:2018-08-05 08:10:23

标签: c++ cmake python-c-api

我在链接cmake中的python 3时遇到问题。

在外壳中进行链接的选项为$(/usr/bin/python3-config --ldflags),并且可以正常工作。

但是当我移至cmake时,我使用:

set(Python_ADDITIONAL_VERSIONS 3.5)
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
target_link_libraries(sim ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(sim ${CMAKE_DL_LIBS})
target_link_libraries(sim ${PYTHON_LIBRARIES})

给我错误:

/usr/bin/ld: /usr/local/lib/libpython3.5m.a(dynload_shlib.o): undefined reference to symbol 'dlsym@@GLIBC_2.2.5'
/usr/lib/x86_64-linux-gnu/libdl.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

然后我尝试

target_link_libraries(sim "$(/usr/bin/python3-config --ldflags)")

但这不适用于错误消息

c++: error: $(/usr/bin/python3-config: No such file or directory
c++: error: unrecognized command line option ‘--ldflags)’

对我而言唯一有效的方法是通过打开子外壳

echo $(/usr/bin/python3-config --ldflags)
  

-L / usr / lib / python3.5 / config-3.5m-x86_64-linux-gnu -L / usr / lib -lpython3.5m -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl ,-O1 -Wl,-Bsymbolic函数

并将内容写为cmake

target_link_libraries(sim "-L/usr/lib/python3.5/config-3.5m-x86_64-linux-gnu -L/usr/lib -lpython3.5m -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions")

这有效,但是方法很讨厌。有什么干净的方法可以执行这种链接吗?

0 个答案:

没有答案