zoukankan      html  css  js  c++  java
  • Linux下使用Eclipse C/C++生成创建并调用动态库(.so)

    一、平台版本

    Linux版本:Lubuntu14.04

    eclipse版本:Oxygen 4.7

    二、创建动态库

    1、创建工程:File->New->C/C++ Project,选择C Managed Build

    2、输入项目名,Project type选Shared Library->Empty Project,工具链选用Linux GCC

     3、新建源文件,New->Soure File,编写动态库代码(这里是简单测试因此没有创建头文件,可以另建目录放置源文件和头文件方便管理)

     

    /*
     * test.c
     *
     *  Created on: 2019年1月15日
     *      Author: 
     */
    #include <stdio.h>
    
    void test()
    {
        printf("hello
    ");
    }

    4、勾选-fPIC,右键项目工程->Properties->C/C++ Build->Settings,Tool Settings->GCC C Comoiler->Miscellaneous,勾选Position independent Code(-fPIC)

    作用(参考http://blog.sina.com.cn/s/blog_54f82cc201011op1.html):

     -fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。 

     5、编译工程,在构建项目工程路径下的./Debug中可以看见生成的.so文件

    三、使用动态库

    1、创建新工程,并设置要使用的库的名称和路径

    2、添加代码,编译运行

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
        test();  //动态库中的函数
        return EXIT_SUCCESS;
    }

    运行时候出现以下错误:

    /home/oyqj/eclipse-workspace2/useTest/Debug/useTest: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory

    原因:

    系统没有找到对应的库文件

    解决方法(参考https://blog.csdn.net/shine_journey/article/details/78356063):

    1、打共享库放到/usr/local/lib目录下(很多开源共享库都会安装到该目录)

    2、修改共享库配置文件/etc/ld.so.conf,修改成以下内容

    include /etc/ld.so.conf.d/*.conf
    /usr/local/lib

     3、执行命令,告知系统共享动态库

    ldconfig

    再次运行程序,成功使用动态库

  • 相关阅读:
    Springboot 连接数据库
    线程专题 -- 线程的创建,状态,工作过程,常见方法
    MySQL中UPDATE语句里SET后使用AND的执行过程和结果分析
    SpringCloud | 通过电商业务场景让你彻底明白SpringCloud核心组件的底层原理
    避坑 | Java8使用并行流(ParallelStream)注意事项
    Spring--AOP、通知的执行顺序
    JVM--理解介绍
    JSF学习实战
    策略模式--实战1
    二叉树、二叉查找树、平衡树和红黑树概念
  • 原文地址:https://www.cnblogs.com/qjswxd/p/10272453.html
Copyright © 2011-2022 走看看