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

Linux: a C++ library fails to link after recompiling

本文关键字:编译 链接 C++ 新编译 Linux      更新时间:2023-10-16

我在远程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问题消失了,但链接仍然失败。

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