我有一个cmake
项目,我试图将可执行文件链接到共享库。但它没有联系起来。经过足够的搜索,没有找到任何有用的解决方案,我在这里发布我的问题,如果有任何明显的错误,请告诉我,因为我不熟悉cmake
这是我的CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
# Set Project Name
set(PROJECT_NAME myproj)
project(${PROJECT_NAME})
# Tell Cmake to invoke gcc with specific flags. Use c++11 standard.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# Include all headers
include_directories(${PROJECT_SOURCE_DIR}/../public/include)
# Driver Program
file(GLOB_RECURSE SOURCE_FILES
"${PROJECT_SOURCE_DIR}/src/*.cpp"
)
# Dont know what to do about this
#set( CMAKE_SKIP_BUILD_RPATH true)
link_directories(${CMAKE_SOURCE_DIR}/../relative/path/to/sharedlib) #contains libshared.so
# Generate Executable, trying to generate shared library to see if it generates # correct dependencies
# add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES})
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
#Link the libraries
target_link_libraries(${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/../relative/path/to/sharedlib/libshared.so)
这是我尝试过的步骤和一些观察。
如果我生成共享库而不是可执行文件,它可以找到依赖的共享库(即libshared.so)
ldd myproj.so
libshared.so => full/path/to/sharedlib/libshared.so (0x00007fa26c263000)
我没有完全理解它的意思,但它能够找到共享库是我猜想的。
如果我尝试生成可执行文件而不是共享库,我会看到库中函数的未定义引用错误。
我也试过了target_link_libraries(${PROJECT_NAME} shared)
,它也给出了同样的错误。
有关如何将共享库链接到我的可执行文件的任何线索?感谢