原贴地址:https://blog.youkuaiyun.com/qq_34647831/article/details/82957707
-
封装动态库
(1)创建Shared Library 工程
创建工程new->project->C Project->Shared Library->Empty Project,之后选择Linux GCC ,输入工程名MeLib,最后点击Finish.(此处Shared Library很好理解,创建的动态链接库目的就是被其他程序所调用,因此创建为共享库)如图:
(2)工程实现
创建相应的功能文件右键工程new->Source folder, 输入文件名此处命名为src,添加要编写的.c文件,右键src,new->Source file,本文中此处命名为test.c,实现代码如下:(此处就是你动态库.so要实现的功能)
(3)工程配置
配置链接参数右键工程,Propertise->C/C++ Build->Settings->GCC C Compiler->Miscellaneous, 将-fPIC勾选上如下:
-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码。则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。
(4)工程编译
点击Build Project 编译成功之后在Debug目录里面生成了libMeLib.so文件,如下:
2.链接动态库
(1)创建工程
创建需要调用动态链接库的工程,new->project->C Project->Executable->Empty Project,输入工程名test,最后点击Finish。
创建相应的功能文件右键工程new->Source folder, 输入文件名此处命名为src.首先添加我们调用的动态链接库的API接口文件testh.h这个头文件主要放动态链接库中封装的函数的声明,我们要用这个动态库时就需要将相应的API头文件加载到工程中,testh.h文件实现如下:
添加要编写的.c文件,右键src,new->Source file,本文中此处命名为main.c,实现代码如下:
(2)添加动态链接库
添加动态链接库的路径,右键工程 ,Propertise->C/C++ Build->Settings->GCC C Linker->Libraries,注意是MeLib 不是libMeLib
(3)修改链接库路径
点击运行,会出现以下错误:error while loading shared libraries: libShared.so: cannot open shared object file: No such file or directory ,因为系统无法从默认位置找到动态链接库文件。修改系统默认搜索链接库的路径,程序即可顺利执行,
方法 (在终端下: sudo ldconfig <放so文件的目录>)