target_link_libraries(${BINNAME} -pthread ${OS_LIBS} )
时间: 2023-09-21 16:10:35 浏览: 76
这是一个 CMake 的代码片段,用于为指定的目标(target)链接库。target_link_libraries() 命令可以用来将库链接到目标上,括号内列出的是目标名称和要链接的库名称,每个名称之间用空格分隔。
在这个代码片段中,它会将库 pthread 和变量 OS_LIBS 中的所有库链接到目标 ${BINNAME} 上。pthread 是 Linux 系统下的线程库,${OS_LIBS} 是一个变量,存储了需要链接的操作系统相关的库。这个代码片段的作用是将这些库链接到 ${BINNAME} 目标上,以便在运行时可以使用这些库的函数和符号。
相关问题
SET(DPDK_LIBS "-Wl,--whole-archive -ldpdk -Wl,--no-whole-archive") ADD_LIBRARY(htp STATIC ${HTP_SOURCE} ) TARGET_LINK_LIBRARIES(htp z m) target_include_directories(htp PUBLIC ${HTP_DIR} ${HTP_DIR_PARENT}) ADD_EXECUTABLE(dp ${TSOURCEcore_SRCS}) TARGET_LINK_LIBRARIES(dp ${DP_LIBS} ${DPDK_LIBS}) TARGET_LINK_LIBRARIES(dp pthread dl rt m numa htp ssl crypto) 仿照htp的形式增加一个nanomsg库
SET(NANOMSG_LIBS "-lnanomsg")
ADD_LIBRARY(nanomsg STATIC ${NANOMSG_SOURCE})
TARGET_LINK_LIBRARIES(nanomsg z m)
TARGET_INCLUDE_DIRECTORIES(nanomsg PUBLIC ${NANOMSG_DIR} ${NANOMSG_DIR_PARENT})
ADD_EXECUTABLE(dp ${TSOURCEcore_SRCS})
TARGET_LINK_LIBRARIES(dp ${DP_LIBS} ${DPDK_LIBS} ${NANOMSG_LIBS})
TARGET_LINK_LIBRARIES(dp pthread dl rt m numa htp ssl crypto)
以上是增加nanomsg库的代码,需要将${NANOMSG_SOURCE}和${NANOMSG_DIR}替换成对应的文件和路径。
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(opencv_cl) SET(OPENCV_PATH /home/toybrick/rk3588_opencv) MESSAGE(STATUS "CMAKE_C_COMPILER:${CMAKE_C_COMPILER}") MESSAGE(STATUS "CMAKE_CXX_COMPILER:${CMAKE_CXX_COMPILER}") MESSAGE(STATUS "OPENCV_PATH:${OPENCV_PATH}") INCLUDE_DIRECTORIES(${OPENCV_PATH}/include/opencv4 ${OPENCV_PATH}/include) LINK_DIRECTORIES(${OPENCV_PATH}/lib /usr/lib/aarch64-linux-gnu/) SET(LINK_LIBS opencv_world mali pthread dl) ADD_EXECUTABLE(opencv_cl opencl_cs.cpp) TARGET_LINK_LIBRARIES(opencv_cl ${LINK_LIBS}) 在哪添加-Wl,-Bsymbolic
您可以在 SET 命令中设置变量 CMAKE_SHARED_LINKER_FLAGS,加上 -Wl,-Bsymbolic 选项即可。修改后的 CMakeLists.txt 如下:
```cmake
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(opencv_cl)
SET(OPENCV_PATH /home/toybrick/rk3588_opencv)
MESSAGE(STATUS "CMAKE_C_COMPILER:${CMAKE_C_COMPILER}")
MESSAGE(STATUS "CMAKE_CXX_COMPILER:${CMAKE_CXX_COMPILER}")
MESSAGE(STATUS "OPENCV_PATH:${OPENCV_PATH}")
INCLUDE_DIRECTORIES(${OPENCV_PATH}/include/opencv4 ${OPENCV_PATH}/include)
LINK_DIRECTORIES(${OPENCV_PATH}/lib /usr/lib/aarch64-linux-gnu/)
SET(LINK_LIBS opencv_world mali pthread dl)
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-Bsymbolic")
ADD_EXECUTABLE(opencv_cl opencl_cs.cpp)
TARGET_LINK_LIBRARIES(opencv_cl ${LINK_LIBS})
```
这样设置 CMAKE_SHARED_LINKER_FLAGS 后,链接器在链接时会尽可能使用本地符号,而不是全局符号,从而解决符号版本不兼容的问题。
阅读全文