相对路径编译动态链接库

  • 欢迎使用Markdown编辑器

欢迎使用Markdown编辑器

在学习CMake的过程中在想要编译相对路径的动态链接库时碰到了一大堆问题,特此记录下来。

第一步是编译出动态链接库.so文件,这一步并不困难,有大把大把的博客叫你,这里也顺带提一下。
首先当然是要写函数这里随便写了一个函数用来编译为动态链接库。

//hello.c
#include"hello.h"  void hello()
{  printf("hello\n");
}
//hello.h
#ifndef HELLO_H
#define HELLO_H
#include<stdio.h>
void hello();
#endif
#CMakeLists.txt
cmake_minimum_required(VERSION 3.0)add_library(hello SHARED ${PROJECT_SOURCE_DIR}/libhello/hello.c)
install(TARGETS hello LIBRARY DESTINATION lib)

写好后在项目的build文件夹下使用cmake …
再使用make编译就生成libhello.so

接下来就是重头戏部分了
新建一个项目 usehellolib 这个项目比较简单 只有一个.c文件

//usehello.c
#include"hello.h"
int main()
{hello();return 0;
}
PROJECT(usehellolib)
ADD_EXECUtABLE(usehellolib usehellolib.c)
#由于个人习惯喜欢讲.h文件放入include文件夹
INCLUDE_DIRECTORIES(include)
#这里就是相对路径的重点了
TARGET_LINK_LIBRARIES(usehellolib ${PROJECT_BINARY_DIR}/libhello.so)

为了使得能够访问相对路径的动态链接库,要使用${PROJECT_BINARY_DIR}cmake内部变量,这个变量代表的就是生成可运行文件的相对位置,例如我习惯在build文件夹下使用cmake … 和 make编译,这样生成的可运行文件就在build文件夹下,要想编译成功就需要讲.so文件放入build文件夹下。
当编译成功时就可以将.so和.out可运行文件一起拷贝到其他文件夹下运行。


纠错 其实能够运行是因为那个路径下的.so文件没有删除,所以说这个办法并没有什么卵用,请大佬们指点。

cmake 学习笔记之相对路径编译动态链接库相关推荐

  1. cmake 学习笔记(三) (转)

    接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cmake 的使用. 学习一下cmake的 finder. finder是神马东西? 当编译一个需要使用第三方库的软件时,我 ...

  2. CMake学习笔记(一)——CMake官网教程

    CMake学习笔记(一)--CMake官网教程 前言: 经历了一星期痛苦的交叉编译,笔者深刻认知到Linux下make的重要性.所以准备放缓两三天自己的工作进度,并学习一下CMake与Makefile ...

  3. CMake 学习笔记 02 - 更复杂的项目

    CMake 学习笔记 02 - 更复杂的项目 源代码见 https://github.com/fengyc/cmake-tutorial 源代码目录组织 一般的项目,会划分为多个子目录,每个子目录中包 ...

  4. cmake学习笔记(七)编写自己的xxxConfig.cmake

    cmake学习笔记(七)编写自己的xxxConfig.cmake 1. onnxruntimeConfig.cmake 2. 进阶版onnxruntimeConfig.cmake 1. onnxrun ...

  5. cmake学习笔记(五)

    cmake学习笔记(五) 添加系统检测 检测代码环境中是否存在某些库文件,在MathFunctions/CMakeLisits.txt添加如下代码: include(CheckSymbolExists ...

  6. linux学习笔记(五)编译内核模块生成ko驱动文件

    系列文章目录 linux学习笔记(五)编译内核模块生成ko驱动文件 文章目录 系列文章目录 前言 一.加载内核简介 二.第一个hello world文件 1.文件树 2.hello.c 3.Makef ...

  7. 多路径配置udev_学习笔记:Linux多路径配置 multipath实现设备用户组绑定详细设置...

    天萃荷净 Linux多路径软件配置,通过multipath实现设备用户组绑定详细设置 现在的Linux系统中,很多都会使用系统自带的multipath多路径软件,在以前的版本中,我们一般通过multi ...

  8. 学习笔记07渲染路径+阴影

    写的超牛逼! unity shader base pass and additional pass - rexzhao - 博客园 (cnblogs.com) 总的来说就是光照计算方式有很多,有的可以 ...

  9. cmake学习笔记(2)--CMake常用的预定义变量

    cmake常用的预定义变量不多,根据经验掌握如下几个就基本上够用了: PROJECT_NAME : 通过 project() 指定项目名称 PROJECT_SOURCE_DIR : 工程的根目录 PR ...

最新文章

  1. 到底什么是云计算-转自http://blog.csdn.net/adwu73
  2. 【SCOI2005】【BZOJ1087】互不侵犯King(状压dp)
  3. webpack+react+redux+es6开发模式
  4. python各进制的表述与转换
  5. 白鹭引擎egret wing编辑器提示报错 egret 命令不存在 乱码的情况解决方法
  6. 开源素材网_22个用于广告素材的开源工具
  7. 获取Java项目根目录
  8. Apache CXF 拦截器示例
  9. 中彩分析家 打字软件
  10. 京东Java面试题、笔试题(含答案)
  11. Eclipse 绿豆沙
  12. 华为手机NFC模拟加密的门禁卡详细教程
  13. 就是要让你搞懂Nginx,这篇就够了!
  14. 最新苹果审核被拒4.3解决方案总结(2020年7月)
  15. 实现极致节能,维谛技术(Vertiv)有哪些特殊技能?
  16. TCP三次握手和四次挥手学习
  17. SAP 模块中文解释 英文全称
  18. AD142A0芯片程序空间资源空间分布的总结
  19. numpy.corrcoef 计算相关系数
  20. 【综合实训】图书管理系统——需求规格说明书

热门文章

  1. BIM小技巧丨关于如何在Revit明细表中显示门窗面积
  2. 刷路由器方法记录(极路由)
  3. 在线教育通过营销招生直播有哪些优势?
  4. java微服务pdf_Java微服务pdf
  5. python中的生成器和迭代器
  6. 安卓高效开发:联系人数据存储与操作基本
  7. sys_brk分析 linux1.2.0版本,linux内存管理之sys_brk实现分析
  8. Fedora 16 桌面用户指南
  9. 网络安全是一个好专业吗?
  10. 面试必备之 GIL(全局解释器锁)