Linux下使用Eclipse创建/生成动态库
创建动态链接库
1.1 创建工程new->project->C Project->Shared Library->Empty Project,之后选择Linux GCC ,输入工程名MeLib,最后点击Finish.(此处Shared Library很好理解,创建的动态链接库目的就是被其他程序所调用,因此创建为共享库)如图:
1.2 创建相应的功能文件右键工程new->Source folder, 输入文件名此处命名为src,添加要编写的.c文件,右键src,new->Source file,本文中此处命名为test.c,实现代码如下:(此处就是你动态库.so要实现的功能)
/*
* testa.c
*
* Created on: 2018年10月7日
* Author:
*/
#include<stdio.h>
void Test(){
printf("hello first!!!");
}
1.3 配置链接参数右键工程,Propertise->C/C++ Build->Settings->GCC C Compiler->Miscellaneous, 将-fPIC勾选上如下:
-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码。则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。
1.4 点击Build Project 编译成功之后在Debug目录里面生成了libMeLib.so文件,如下:
使用动态库
2.1 创建需要调用动态链接库的工程,new->project->C Project->Executable->Empty Project,输入工程名test,最后点击Finish.
2.2 创建相应的功能文件右键工程new->Source folder, 输入文件名此处命名为src.首先添加我们调用的动态链接库的API接口文件testh.h这个头文件主要放动态链接库中封装的函数的声明,我们要用这个动态库时就需要将相应的API头文件加载到工程中,testh.h文件实现如下:
/*
* testh.h
*
* Created on: 2018年10月7日
* Author:
*/
#ifndef TESTH_H_
#define TESTH_H_
void Test();
#endif /* TESTH_H_ */
添加要编写的.c文件,右键src,new->Source file,本文中此处命名为main.c,实现代码如下:
/*
* main.c
*
* Created on: 2018年10月7日
* Author:
*/
#include "testh.h"
int main(){
Test();
return 0;
}
2.3 添加动态链接库的路径,右键工程 ,Propertise->C/C++ Build->Settings->GCC C Linker->Libraries,注意是MeLib 不是libMeLib
2.4 添加环境变量
如果遇到以下问题
是因为编译器会去默认的路径去寻找库文件,
因此此处我们要添加新的库文件路径,Run as->Run Configurations->C/C++Application ->test ->Environment ,如下:
2.5 运行结果