Linux:C++库在重新编译后无法链接
Linux: a C++ library fails to link after recompiling
我在远程Linux服务器上安装了一个 https://github.com/simongog/sdsl-lite 库。我所做的是在我的主目录中创建lib
,include
目录,然后按./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仍然存在一些问题,但没关系)。
相关文章:
- Visual Studio 2017 ARM 交叉编译链接器崩溃
- CGAL 编译/链接器错误
- opencv 3.0 Visual Studio Community 2017 编译链接错误
- 在 Linux 中编译/链接多个 C++ 库
- 加速极慢的 MinGW-w64 编译/链接?
- Xcode - 如何使用"-fexhaustive-register-search"进行编译 - 链接器崩溃需要
- 交叉编译:链接时对std::__atomic_futex_unsigned_base::_M_futex_notify_
- 无法从单独的.cpp使用模板化成员编译/链接类
- 交叉编译链接器错误
- Eclipse C/C++:外部库的交叉编译链接器错误:Ubuntu VM amd64 to Ubuntu armhf
- 编译/链接 C 和 C++ 文件时出现问题
- C++编译链接
- 如何正确编译/链接Linux Makefile中的单元测试
- 在以下程序中获取编译链接错误
- 与Boost日志进行交叉编译链接期间未解决的符号
- 如何编译/链接Boost与clang++/libc++
- Cef项目编译链接error2001
- 我如何编译/链接测试用例(googleTest)使用cmake的代码捆绑在共享库
- 编译链接
- 编译/链接过程是如何工作的