设为首页 加入收藏

TOP

Linux下使用cmake生成动态链接库并使用(二)
2019-01-06 16:10:08 】 浏览:266
Tags:Linux 使用 cmake 生成 动态 链接
lo


(2)永久设置解决方案


永久设置解决方案一:
su用户下
编辑.bashrc文件
vi /root/.bashrc
在最后加入
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/linuxidc/workspace/hello/install/lib


然后
source /root/.bashrc
就能够运行了。


在文件的末尾加入要调用的动态链接库的路径
本文加入
/home/linuxidc/workspace/hello/install/lib


然后在控制台执行


ldconfig


运行程序就能够执行了。


##2.2 方法2.Cmake链接动态链接库
那么在大型工程中怎么链接外部共享库呢?本节介绍编辑CMakeLists.txt来使用生成的动态链接库。
在工程目录/home/linuxidc/workspace/usehellolib下新建CMakeLists.txt如下:
PROJECT(usehellolib)
ADD_EXECUTABLE(usehellolib usehellolib.c)
INCLUDE_DIRECTORIES(/home/linuxidc/workspace/hello/install/include)
TARGET_LINK_LIBRARIES(usehellolib /home/linuxidc/workspace/hello/install/lib/libhello.so)


解析:
INCLUDE_DIRECTORIES()告诉编译器头文件在哪个位置。
TARGET_LINK_LIBRARIES()告诉链接器动态链接库在哪个位置
输入
cmake.
make
会出现链接错误
/usr/bin/ld: cannot find -lhello
/usr/bin/ld: cannot find -l*解决方法
ld链接器告诉你找不到库函数,那么你就要把库函数放到ld链接器能够找到的地方。因此解决方法如下


方法1
将要调用的库函数复制到linux默认搜索库函数的目录下
即/usr/lib 目录。
sudo cp /home/linuxidc/workspace/hello/install/lib/libhello.so /usr/lib


方法2
使用软链接(个人理解类似于创建快捷方式)
sudo ln -s /home/linuxidc/workspace/hello/install/lib/libhello.so /usr/lib/libhello.so


ln -s 它的功能是为某一个文件在另外一个位置建立一个同步的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件


方法3
类似于上文的动态链接库的路径设置方法
cd /etc/ld.so.conf.d/
cp libc.conf hello.conf
vi hello.conf


编辑hello.conf的内容如下
/home/linuxidc/workspace/hello/install/lib


告诉链接器动态链接库的路径。
执行
ldconfig
输入
ldconfig -p |grep libhello
输出libhello动态链接库信息
设置好后
注意要重新删除所有Cmake生成的文件
再输入
cmake.
make
就能够正常使用了。


补充


方法4
如果加上link_directories这一句就不会出现 cannot find -l* 的问题,最终的CMakeLists.txt如下
project(usehellolib)
cmake_minimum_required (VERSION 2.6)
INCLUDE_DIRECTORIES(/home/linuxidc/workspace/hello/install/include)
link_directories(/home/linuxidc/workspace/hello/install/lib)
add_executable(${PROJECT_NAME} usehellolib.c)
target_link_libraries(${PROJECT_NAME} hello.so)


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++版遗传算法求解TSP 下一篇多目录工程的CmakeLists.txt编写..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目