Linux下编译链接动态库

35 篇文章 1 订阅

对于Linux下的c++部署来说,最头疼的就是动态库依赖了。在本地运行很好的程序换一台机器可能就不好用了。(此处暂时不考虑docker)

因为安装在本地的动态库在部署的机器上没有,就算有路径也未必一致,版本也不一定一致,最常见的就是依赖opencv,一般解决办法就是使用opencv静态库,然后编译时把opencv静态库链接进去,这样就没有opencv依赖库的问题了。

还有就是cuda依赖库问题,网上查得CUDA从CUDA5.5开始,支持static library。

如果没有静态库我们就会遇到很多麻烦,所以考虑一下其他解决方案。

Linux下编译链接动态库

1、使用makefile

 

2、使用CMakeLists.txt

下面的CMakeLists.txt仅供参考:

cmake_minimum_required(VERSION 3.5)
 
project(dbnet_demo LANGUAGES CXX)
 
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(OpenCV 3.1.0 REQUIRED)
set(OPENCV_DYNAMIC_LIBS  "${CMAKE_CURRENT_SOURCE_DIR}/../libs")       # 动态 opencv native 库路径
add_library(libopencv_core SHARED IMPORTED )
set_target_properties(libopencv_core PROPERTIES   IMPORTED_LOCATION "${OPENCV_DYNAMIC_LIBS}/libopencv_core.so")
add_library(libopencv_imgcodecs SHARED IMPORTED )
set_target_properties(libopencv_imgcodecs PROPERTIES   IMPORTED_LOCATION "${OPENCV_DYNAMIC_LIBS}/libopencv_imgcodecs.so")
add_library(libopencv_imgproc SHARED IMPORTED )
set_target_properties(libopencv_imgproc PROPERTIES   IMPORTED_LOCATION "${OPENCV_DYNAMIC_LIBS}/libopencv_imgproc.so")
set(mOpenCV_LIBS  libopencv_core libopencv_imgcodecs  libopencv_imgproc)

message(STATUS "Opencv library status: ")
message(STATUS "> version: ${OpenCV_VERSION} ")
message(STATUS "> library: ${OpenCV_LIBS} ")
message(STATUS "> include: ${OpenCV_INCLUDE_DIRS} ")

# Add OpenCV headers location to your include paths
include_directories(${OpenCV_INCLUDE_DIR})
 
set(Torch_DIR /mnt/hgfs/vmsharefolders/libtorch/share/cmake/Torch)
find_package(Torch REQUIRED)
 
add_executable(dbnet_demo test_db.cpp clipper.cpp)
target_link_libraries(dbnet_demo ${mOpenCV_LIBS}
		"${TORCH_LIBRARIES}" )
set_property(TARGET dbnet_demo PROPERTY CXX_STANDARD 17)

上面的内容只指定了opencv的相对路径,经过验证该方法正确,至于怎么找到这些依赖库是在不使用相对路径时编译通过,然后通过ldd查找依赖库,再把依赖库放到相对路径下,除了opencv这三个库外还有libz,libzstd,libjasper,libpng,libjpeg.

同时需要注意的是,我们拷贝过来的即要有真正的库也要有链接库,否则会包找不到;另一个可能的解决办法就是尝试一下libopencv_core.so换成libopencv_core.so.3.4.2(真正的库),其他库操作类似。

 

 

 

参考: linxu下CUDA静态库-下

参考:linux cmake分别指定编译/运行时动态库链接路径

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落花逐流水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值