You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LD_LIBRARY_PATH指向已安装库时,如何让C++测试链接构建目录库

问题:测试程序链接到已安装库而非本地构建库

我正在开发一个通过设置export LD_LIBRARY_PATH=...完成安装的项目。开发阶段遇到的问题是,编译后的测试文件会链接到已安装的库,而非当前编译的本地构建库。由于项目依赖LD_LIBRARY_PATH中的另一个项目,无法通过取消设置该路径来进行测试。

此前查找过相关问题但未能解决:

  • CMake: link test with library in build directory, not with installed version
  • gtest is linking to an installed library

可复现的项目结构

./CMakeLists.txt
./src/libA.cpp
./src/CMakeLists.txt
./include/libA.hpp
./test/test_libA.cpp
./test/CMakeLists.txt

各文件内容

CMakeLists.txt

cmake_minimum_required(VERSION 3.19)
project(
    LibraryTest
    VERSION 0.1
    LANGUAGES CXX)

add_subdirectory(src)

enable_testing()
add_subdirectory(test)

install(
    TARGETS ${PROJECT_NAME}Lib
    EXPORT ${PROJECT_NAME}Targets
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

install(
    EXPORT ${PROJECT_NAME}Targets
    FILE ${PROJECT_NAME}Targets.cmake
    NAMESPACE ${PROJECT_NAME}::
    DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake)

include/libA.hpp

#pragma one
bool foo();

src/CMakeLists.txt

add_library(
    ${PROJECT_NAME}Lib SHARED
    libA.cpp)

target_include_directories(
    ${PROJECT_NAME}Lib PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>)

add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME}Lib )

src/libA.cpp

#include "libA.hpp"

bool foo()
{
    return true;
}

test/CMakeLists.txt

# Download GTest
include(FetchContent)
option(INSTALL_GTEST "Enable installation of googletest." OFF)
FetchContent_Declare(
    googletest
    GIT_REPOSITORY https://github.com/google/googletest
    GIT_TAG v1.13.0)
FetchContent_MakeAvailable(googletest)
include(GoogleTest)

# Add test
add_executable(test_libA test_libA.cpp)
target_link_libraries(
    test_libA
    ${PROJECT_NAME}::${PROJECT_NAME}
    GTest::gtest_main
    GTest::gtest
    GTest::gmock
    )
gtest_add_tests(TARGET test_libA)

test/test_libA.cpp

#include "libA.hpp"
#include <gtest/gtest.h>

TEST(libA, dummy)
{
    EXPECT_TRUE(foo());
}

int main(int argc, char *argv[])
{
    ::testing::InitGoogleTest(&argc, argv);
    auto result = RUN_ALL_TESTS();
    return result;
}

构建步骤

使用cmake 3.22.1和g++ 12.1.0执行以下命令:

mkdir build
cd build
cmake ..
make
make install

ldd命令输出

ldd test/test_libA
libLibraryTestOut.so => $LD_LIBRARY_PATH/lib/libLibraryTestLib.so

内容的提问来源于Stack Exchange,提问作者TillLeiden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:03:14