无法将可执行文件链接到共享库

时间:2015-08-03 17:31:39

标签: c++ cmake shared-libraries

我有一个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)

这是我尝试过的步骤和一些观察。

  1. 如果我生成共享库而不是可执行文件,它可以找到依赖的共享库(即libshared.so)

    ldd myproj.so

    libshared.so => full/path/to/sharedlib/libshared.so (0x00007fa26c263000)

  2. 我没有完全理解它的意思,但它能够找到共享库是我猜想的。

    1. 如果我尝试生成可执行文件而不是共享库,我会看到库中函数的未定义引用错误。

    2. 我也试过了target_link_libraries(${PROJECT_NAME} shared),它也给出了同样的错误。

    3. 有关如何将共享库链接到我的可执行文件的任何线索?感谢

0 个答案:

没有答案