Linux:重新编译后,C ++库无法链接

时间:2018-03-01 16:05:56

标签: c++ linker googletest

我在远程Linux服务器上安装了https://github.com/simongog/sdsl-lite库。我所做的是在我的主目录中创建libinclude目录,然后将脚本作为./install.sh /my/home/dir运行,如上页所述。我能够使用CMakeLists.txt文件将其与我的其他程序成功链接一次,并将其与以下内容类似:

cmake_minimum_required(VERSION 2.8)
set (CMAKE_CXX_STANDARD 14)

macro(use_cxx14)
  if (CMAKE_VERSION VERSION_LESS "3.1")
    if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
        set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2 -mcmodel=large")
    endif ()
  else ()
     set (CMAKE_CXX_STANDARD 14)
  endif ()
endmacro(use_cxx14)

use_cxx14()

# Locate GTest
link_directories(/my/home/dir/)
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /my/home/dir/)
list(APPEND CMAKE_PREFIX_PATH "/my/home/dir/")
list(APPEND CMAKE_LIBRARY_PATH /my/home/dir/lib/)
INCLUDE_DIRECTORIES(/my/home/dir/include)
LINK_DIRECTORIES(/my/home/dir/lib)
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})

# Link runTests with what we want to test and the GTest and pthread library
add_executable(runTests rs_bitvector_test.cpp)
# SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
# SET(BUILD_SHARED_LIBRARIES OFF)
# SET(CMAKE_EXE_LINKER_FLAGS "-static")
target_link_libraries(runTests sdsl ${GTEST_LIBRARIES} pthread)

(服务器缺少C ++ 14,但名称仍然存在,尽管我确实使用了C ++ 11选项)

现在我已经更改了以前下载的库位置内的源文件并重新编译了它。现在连接已停止工作。可能是什么原因?在重新编译期间,远程服务器不断告诉我一些“未来的修改时间”和“构建可能不完整”。这是什么原因?可以做些什么?

编辑:基于评论中的建议,我删除了build目录(类似于make clean)并将其替换为原始捆绑目录中的目录。现在,timstamps问题已经消失,但链接仍然失败。

1 个答案:

答案 0 :(得分:0)

有趣的是,在sdsl使用g++ 7.3进行编译时,注意到cmake在安装期间检测到4.8后,我使用https://cmake.org/Wiki/CMake_FAQ#How_do_I_use_a_different_compiler.3F将编译器设置为{{ 1}}(使用上面链接中的方法3),它最终起作用(GTest仍有一些问题,但没关系)。