东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2553|回复: 0
打印 上一主题 下一主题

[C/C++] 如何使用别人生成的库文件libos_cfar_2d.so

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14437
QQ
跳转到指定楼层
楼主
发表于 2021-12-13 11:15:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式






# 如何使用别人生成的库文件libos_cfar_2d.so


如果只有头文件,没有具体实现,则报错:
对‘os_cfar_2d_detection(arma::Mat<float>, std::vector<point_3d, std::allocator<point_3d> >&, OS_CFAR_PARAM&)’未定义的引用


使用的是这个http://www.ai111.vip/thread-1303-1-1.html 里生成的 动态和静态库文件 !


Linux下的库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀
Windows 下.DLL是动态链接库, .LIB是静态链接库


动态库与静态库的区别:
动态库个编译好的程序,程序运行时可以直接调用其中的函数, 不参加工程的编译
而静态库应该说是一个程序集, 只是把一些相应的函数总结在一起, 如果调用静态库中的函数,在编译时,这些调用的函数都将参加编译


静态库必要的目标代码的是在对程序编译的时候被加入到程序中,而运行时不再需要.a的库了
而动态库,则是在运行时转载




Cannot specify link libraries for target "main" which is not built by this project.
解决办法:要将 add_executable的声明放到设置库文件的target_link_libraries之前




include_directories("./include/")
add_executable(main ${ALL_SRCS})        # 指定生成目标,注意这里要用${ALL_SRCS}!!!
# 如何使用别人生成的库文件
# 添加动态连接库的路径
target_link_libraries(main "/home/jiang/jjj_armadillo_works/libs/libos_cfar_2d.so")

使用target_link_libraries()来链接动态库 ,在make的时候发现,只有使用动态库的绝对路径才行得通,
换成相对路径就不行
这样就不行:target_link_libraries(main "./libs/libos_cfar_2d.so")

报错:
  1. /usr/bin/ld: 找不到 -l./libs/libos_cfar_2d.so
  2. collect2: error: ld returned 1 exit status
  3. CMakeFiles/main.dir/build.make:144: recipe for target 'main' failed
复制代码





或者:


在cmake语法中,link_libraries和target_link_libraries是很重要的两个链接库的方式,虽然写法上很相似,但是功能上有很大区别:

亲测:link_
directories用在add_executable之前,target_link_libraries用在add_executable之后

# 包含自己的头文件目录
include_directories("./include/")
# 包含自己的库文件目录
link_directories("./libs/")
把该路径添加到第三方库搜索路径中,使用TARGET_LINK_LIBRARIES的时候,只需要给出动态链接库的名字就行了

add_executable(main ${ALL_SRCS})        # 指定生成目标,注意这里要用${ALL_SRCS}!!!

# 如何使用别人生成的库文件
# 添加动态连接库的路径
target_link_libraries(main -los_cfar_2d) 或 target_link_libraries(main os_cfar_2d)






  1. cmake_minimum_required (VERSION 3.15)
  2. project (main)

  3. SET(CMAKE_CXX_STANDARD 14)
  4. #SET(CMAKE_C_STANDARD 11)

  5. #aux_source_directory(. ALL_SRCS)                        # 添加当前目录下所有的源文件
  6. # set(ALL_SRCS "vibe的使用_用了armadillo.cpp" "vibe.cpp" "vibe.h")
  7. # set(ALL_SRCS "bp_img_4T4R_os_cfar.cpp" "TimerClock.hpp" "os_cfar_2d.h" "os_cfar_2d.cpp" "point_3d.hpp" "typedef.h")
  8. set(ALL_SRCS "os_cfar_2d_grid_search.cpp")

  9. include_directories("./include/")


  10. #add_subdirectory(lib)                                                # 添加lib子目录
  11. add_executable(main ${ALL_SRCS})        # 指定生成目标,注意这里要用${ALL_SRCS}!!!
  12. # message(WARNING "我说:lib目录里的文件编译成动态库再由main函数调用")
  13. #target_link_libraries(main power)        # 添加链接库,power是在lib子目录的CMakeLists中定义的

  14. # 如何使用别人生成的库文件
  15. # 添加动态连接库的路径
  16. target_link_libraries(main "/home/jiang/jjj_armadillo_works/libs/libos_cfar_2d.so")

  17. #find_package(FFTW3f)
  18. #target_link_libraries(main -lboost_system -lboost_thread -lfftw3f -lpthread)
  19. #add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)

  20. # If you have installed Armadillo via the cmake installer,
  21. # use the following command to compile your programs:
  22. # g++ prog.cpp -o prog -O2 -std=c++11 -larmadillo
  23. target_link_libraries(main armadillo)
  24. # 官方链接:https://gitlab.com/conradsnicta/armadillo-code

  25. # 冲突如何解决?
  26. # /usr/bin/ld: warning: libarmadillo.so.8, needed by //usr/lib/libgdal.so.20, may conflict with libarmadillo.so.10


  27. # c++使用opencv库的CMakeLists.txt文件配置Demo
  28. find_package(OpenCV REQUIRED)
  29. #显示OpenCV_INCLUDE_DIRS的值
  30. message("opencv头文件目录:" ${OpenCV_INCLUDE_DIRS})
  31. message("opencv的版本信息:" ${OpenCV_VERSION})
  32. message("opencv的库文件信息:" ${OpenCV_LIBS})
  33. #添加OpenCV头文件
  34. include_directories(${OpenCV_INCLUDE_DIRS})
  35. # 将库文件链接到可执行程序main上
  36. target_link_libraries(main ${OpenCV_LIBS})


  37. # cmake方式依赖Python头文件和库文件的配置
  38. find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
  39. find_package(Python3 COMPONENTS NumPy)
  40. find_package(PythonLibs REQUIRED)

  41. # python的头文件 PYTHON_INCLUDE_DIRS
  42. message("python的头文件目录:" ${PYTHON_INCLUDE_DIRS})
  43. include_directories(${PYTHON_INCLUDE_DIRS})
  44. # python的库文件 PYTHON_LIBRARIES   
  45. # 解决报错: fatal error: Python.h: 没有那个文件或目录

  46. message("python的库文件信息:" ${PYTHON_LIBRARIES})
  47. target_link_libraries(main ${PYTHON_LIBRARIES})


复制代码

  1. cmake_minimum_required (VERSION 3.15)
  2. project (main)

  3. SET(CMAKE_CXX_STANDARD 14)
  4. #SET(CMAKE_C_STANDARD 11)

  5. #aux_source_directory(. ALL_SRCS)                        # 添加当前目录下所有的源文件
  6. # set(ALL_SRCS "vibe的使用_用了armadillo.cpp" "vibe.cpp" "vibe.h")
  7. # set(ALL_SRCS "bp_img_4T4R_os_cfar.cpp" "TimerClock.hpp" "os_cfar_2d.h" "os_cfar_2d.cpp" "point_3d.hpp" "typedef.h")
  8. set(ALL_SRCS "os_cfar_2d_grid_search.cpp")

  9. include_directories("./include/")
  10. link_directories("./libs/")

  11. #add_subdirectory(lib)                                                # 添加lib子目录
  12. add_executable(main ${ALL_SRCS})        # 指定生成目标,注意这里要用${ALL_SRCS}!!!
  13. # message(WARNING "我说:lib目录里的文件编译成动态库再由main函数调用")
  14. #target_link_libraries(main power)        # 添加链接库,power是在lib子目录的CMakeLists中定义的

  15. # 如何使用别人生成的库文件
  16. # 添加动态连接库的路径
  17. target_link_libraries(main os_cfar_2d)
  18. # target_link_libraries(main "/home/jiang/jjj_armadillo_works/libs/libos_cfar_2d.so")


  19. #find_package(FFTW3f)
  20. #target_link_libraries(main -lboost_system -lboost_thread -lfftw3f -lpthread)
  21. #add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)

  22. # If you have installed Armadillo via the cmake installer,
  23. # use the following command to compile your programs:
  24. # g++ prog.cpp -o prog -O2 -std=c++11 -larmadillo
  25. target_link_libraries(main armadillo)
  26. # 官方链接:https://gitlab.com/conradsnicta/armadillo-code

  27. # 冲突如何解决?
  28. # /usr/bin/ld: warning: libarmadillo.so.8, needed by //usr/lib/libgdal.so.20, may conflict with libarmadillo.so.10


  29. # c++使用opencv库的CMakeLists.txt文件配置Demo
  30. find_package(OpenCV REQUIRED)
  31. #显示OpenCV_INCLUDE_DIRS的值
  32. message("opencv头文件目录:" ${OpenCV_INCLUDE_DIRS})
  33. message("opencv的版本信息:" ${OpenCV_VERSION})
  34. message("opencv的库文件信息:" ${OpenCV_LIBS})
  35. #添加OpenCV头文件
  36. include_directories(${OpenCV_INCLUDE_DIRS})
  37. # 将库文件链接到可执行程序main上
  38. target_link_libraries(main ${OpenCV_LIBS})


  39. # cmake方式依赖Python头文件和库文件的配置
  40. find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
  41. find_package(Python3 COMPONENTS NumPy)
  42. find_package(PythonLibs REQUIRED)

  43. # python的头文件 PYTHON_INCLUDE_DIRS
  44. message("python的头文件目录:" ${PYTHON_INCLUDE_DIRS})
  45. include_directories(${PYTHON_INCLUDE_DIRS})
  46. # python的库文件 PYTHON_LIBRARIES   
  47. # 解决报错: fatal error: Python.h: 没有那个文件或目录

  48. message("python的库文件信息:" ${PYTHON_LIBRARIES})
  49. target_link_libraries(main ${PYTHON_LIBRARIES})


复制代码





让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-5-6 02:20 , Processed in 0.171490 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表