项目 A 依赖共享库 B,B 依赖 C,A 不依赖 C。当我使用 B 的 API 时,警告 B 找不到 C
Project A rely on shared library B, B rely on C, A don't rely on C. When I use an API of B, warning B can't find C
一个项目A
依赖于共享库B
,B
依赖于C
,A
不依赖于C
。B
作为共享库进行编译和安装。当A
使用B
的 API 时,会出现一条警告,B
找不到C
,如代码所示。
在该代码中,A
LibTest
。B
TdLib
.C
pangolin
.
Scanning dependencies of target LibTest
[ 50%] Building CXX object CMakeFiles/LibTest.dir/main.cpp.o
[100%] Linking CXX executable LibTest
/usr/bin/ld: warning: libpangolin.so, needed by /home/wang/CLionProjects/TdLibrary/install/lib/libTdLib.so, not found (try using -rpath or -rpath-link)
/home/wang/CLionProjects/TdLibrary/install/lib/libTdLib.so: 'pangolin::CreateDisplay()’ undefined reference
...
collect2: error: ld returned 1 exit status
CMakeFiles/LibTest.dir/build.make:84: recipe for target 'LibTest' failed
make[3]: *** [LibTest] Error 1
CMakeFiles/Makefile2:109: recipe for target 'CMakeFiles/LibTest.dir/all' failed
make[2]: *** [CMakeFiles/LibTest.dir/all] Error 2
CMakeFiles/Makefile2:121: recipe for target 'CMakeFiles/LibTest.dir/rule' failed
make[1]: *** [CMakeFiles/LibTest.dir/rule] Error 2
Makefile:131: recipe for target 'LibTest' failed
make: *** [LibTest] Error 2
共享图书馆B
CMakelist.txt
.
add_library(TdLib SHARED
pangolin_tools.cpp
pangolin_tools.h
)
#pangolin
find_package(Pangolin REQUIRED)
include_directories(${Pangolin_INCLUDE_DIRS} )
set(HEADER_FILES
pangolin_tools.h
)
set_target_properties(TdLib PROPERTIES
PUBLIC_HEADER
"${HEADER_FILES}"
)
target_link_libraries(TdLib PRIVATE
${Pangolin_LIBRARIES}
)
install(TARGETS TdLib
# IMPORTANT: Add the foo library to the "export-set"
EXPORT ${PROJECT_NAME}Targets
RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT bin
LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT shlib
PUBLIC_HEADER DESTINATION "${INSTALL_INCLUDE_DIR}/TdLibrary"
COMPONENT dev)
我安装B
cmake .. -DCMAKE_INSTALL_PREFIX:=/home/wang/CLionProjects/TdLibrary/install
make
make install
项目A
CMakelist.txt
.
cmake_minimum_required(VERSION 3.9)
project(LibTest)
set(CMAKE_CXX_STANDARD 11)
#TdLib
set(TdLib_DIR "/home/wang/CLionProjects/TdLibrary/install/lib/CMake/TdLib/")
find_package(TdLib REQUIRED)
include_directories(${TdLib_INCLUDE_DIRS})
add_executable(LibTest main.cpp)
target_link_libraries(LibTest ${TdLib_LIBRARIES}
您肯定是链接到共享库。
在下文中,我将删除PRIVATE
关键字:
target_link_libraries(TdLib PRIVATE
${Pangolin_LIBRARIES}
)
看看这是否有帮助。就我而言,我注意到您可以在没有任何target_link_libraries()
的情况下链接库,然后在构建可执行文件时强制您添加库。
我也猜这个PRIVATE
关键字可能并不完全符合您的想法。
相关文章:
- 如何从C++中的依赖类型中获得它所依赖的类型
- 用于访问容器<T>数据成员的正确 API
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++MySQL C api用户输入行
- 如何使用 AWS Transcribe C++ API 中的'StartTranscriptionJobRequest'?
- 将std::string传递给WriteConsole API
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 将依赖名称显式标记为类型名和模板的奇怪之处
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- C++GTKMM gui循环依赖关系
- 在gtest.中使用fff.h模拟系统API
- 有没有任务栏API可以立即应用注册表更改
- 通过ccmake在cmake中缓存依赖选项
- C++win32 API创建多个类似视口的窗口
- 使用libcurl提交批量url的正确BING Api POST url是什么
- 项目 A 依赖共享库 B,B 依赖 C,A 不依赖 C。当我使用 B 的 API 时,警告 B 找不到 C
- C++具有公共 API 的动态库,可遮盖依赖库
- C++ API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL依赖项问题
- 有没有一种方法可以让本机npm包依赖于特定版本的v8C++API