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

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

原文地址:https://www.cnblogs.com/qjswxd/p/10272453.html