在eclipse中加入.a静态链接库及动态库的方法 您所在的位置:网站首页 下司犬200元出售 在eclipse中加入.a静态链接库及动态库的方法

在eclipse中加入.a静态链接库及动态库的方法

2023-09-21 11:52| 来源: 网络整理| 查看: 265

在eclipse中加入.a静态链接库及动态库的方法

在eclipse中加入.a静态链接库的方法。

Project->Properties->C/C++ Build->Tool Settings->Miscellaneous->other Objects:在文件系统中找到**.a加入。

---------------------------------------------------------可爱的分割线----------------------------------------------------------

(一)http://linux.chinaunix.net/bbs/archiver/?tid-974839.html

linux 动态库[b]Linux[/b][b]下动态库使用小结[/b]. 静态库和动态库的基本概念静 态库,是在可执行程序连接时就已经加入到执行码中,在物理上成为执行程序的一部分;使用静态库编译的程序运行时无需该库文件支持,哪里都可以用,但是生成的可执行文件较大。动态库,是在可执行程序启动时加载到执行程序中,可以被多个可执行程序共享使用。使用动态库编译生成的程序相对较小,但运行时需要库文 件支持,如果机器里没有这些库文件就不能运行。2.如何使用动态库如何程序在连接时使用了共享库,就必须在运行的时候能够找到共享库的位置。linux的可执行程序在执行的时候默认是先搜索/lib和/usr/lib这两个目录,然后按照 /etc/ld.so.conf里面的配置搜索绝对路径。同时,Linux也提供了环境变量LD_LIBRARY_PATH供用户选择使用,用户可以通过 设定它来查找除默认路径之外的其他路径,如查找/work/lib路径,你可以在/etc/rc.d/rc.local或其他系统启动后即可执行到的脚本添加如下语句:LD_LIBRARY_PATH =/work/lib:$(LD_LIBRARY_PATH)。并且LD_LIBRARY_PATH路径优先于系统默认路径之前查找(详细参考《使用LD_LIBRARY_PATH》)。不过LD_LIBRARY_PATH的设定作用是全局的,过多的使用可能会影响到其他应用程序的运 行,所以多用在调试。(LD_LIBRARY_PATH的缺陷和使用准则,可以参考《WhyLD_LIBRARY_PATH is bad》 )。通常情况下推荐还是使用gcc的-R或-rpath选项来在编译时就指定库的查找路径,并且该库的路径信息保存在可执行文件中,运行时它会直接到该路径查找库,避免了使用LD_LIBRARY_PATH环境变量查找。3.库的链接时路径和运行时路径现代连 接器在处理动态库时将链接时路径(Link-time path)和运行时路径(Run-time path)分开,用户可以通过-L指定连接时库的路径,通过-R(或-rpath)指定程序运行时库的路径,大大提高了库应用的灵活性。比如我们做嵌入式移植时#arm-linux-gcc $(CFLAGS) –o target –L/work/lib/zlib/-llibz-1.2.3 (work/lib/zlib下是交叉编译好的zlib库),将target编译好后我们只要把zlib库拷贝到开发板的系统默认路径下即可。或者通过- rpath(或-R )、LD_LIBRARY_PATH指定查找路径。  

------------------------------------------------------------------------------------------------------------------------

linux 下的静态链接库 为.a文件,动态链接库为.so文件。本文主要讲解linux下,用eclipse创建并使用动态链接库的方法。

一、eclipse 创建动态链接库

1、new -> project -> c++ Project 

如图:选择Share Library -> Empty Project ,并输入工程名:share ,点击Finish,完成工程的创建。

2、在share工程中编写代码,或者引入文件系统。

(引入文件系统的方法:右键 share工程 -> import ->General ->File System ->选择想要制作成动态链接库的文件)

3、share工程中如果需要调用其他动态链接库,则需要添加其他动态链接库(添加方法与下面使用动态链接库中的相同),再编译。否则直接进行编译。

编译之后,会在Debug目录下产生 libshare.so 文件,即是我们需要的动态链接库

 

二、动态链接库的使用:

需要注意3点:

1、工程的 include 搜索路径中需要添加 share工程的路径(即动态链接库 工程所在路径),因为编译时要用到里面的 头文件(.h文件)

2、添加要搜索的动态链接库,此处是libshare.so,以及搜索路径

3、 添加环境变量 LD_LIBRARY_PATH ,并且它的值是share工程的路径(即动态链接库 工程所在路径)。或者编译的时候,将动态链接库的地址编译到工程中(当动态链接库又要调用自己创建的其他动态链接库时,此方法好用)。还有一种方法就是 将动态链接库 拷贝到 /usr/lib 或者/lib目录下。

参考:

当运行时,系统会在 LD_LIBRARY_PATH  所包含的路径中去寻找 动态链接库,即libshare.so,当然系统默认也会在/usr/lib 、/lib 目录下寻找动态链接库

具体方法如下:

1、新建工程 new -> c++ Project -> Executable -> Empty Project

工程名为:mass

2、编写所需代码,包含动态链接库,此处是libshare.so

右键工程mass -> Properites  -> C/C++ Build -> Settings ->  Tool Settings 

如图:

选择GCC C++ Linker -> Libraries ,在右上面的窗口处,点击+ 加号 ,添加 share 。 在下面窗口处 点击 + 加号,添加 "${workspace_loc:/share/Debug}" 

(/share/Debug 就是 libshare.so 所在的路径)

3、添加 include 搜索路径

如图:

选择C/C++ General -> Path and Symbols ->Reference  ,会看到所有的工程名称,选择share工程,这样会自动在 include 的搜索路径中加入 share所在路径。

注意:在Configuration 一栏 最好选择 All Configurations4、添加LD_LIBRARY_PATH环境变量右键 mass 工程 -> Run As ->Run Configurations,出现如图窗口

左边选择 mass 工程 -> Environment -> New , 如图添加环境变量。

当然也可以不添加LD_LIBRARY_PATH ,而是将动态链接库的路径编译到工程中。

参考:

5、编译运行即可。

其他方法:

对于建立SharedLibrary,其实很简单,就是建立工程的时候选择Shared Library。想必很多朋友都希望在eclipse中编译好动态库以后能在我们的程序中直接调用,并且不需要在调用程序(这里以test为例,库工程名为mylib)中去配置环境变量LD_LIBRARY_PATH,或者在gcc编译时指定路径名(该方法也不错,很适用较少库文件的引用)  -R${workspace_loc:/mylib/Debug}    调用我们编译好的库有两步:   1.增加包含目录,在workspace中将需要的库包含进来Eclipse wbrCDT动态库Shared wbrLibrary配置与使用,解决找不到.so的问题   2.添加动态库名和库的路径Eclipse wbrCDT动态库Shared wbrLibrary配置与使用,解决找不到.so的问题    现在说下环境变量,使用LD_LIBRARY_PATH变量,选中project右键-> run as -> run configuration-> Environment,add一个,name为LD_LIBRARY_PATH,value为${workspace_loc:/mylib/Debug},Eclipse wbrCDT动态库Shared wbrLibrary配置与使用,解决找不到.so的问题   这样程序能在eclipse中运行了,但我们想到终端运行却还是"error while loading sharedlibraries:...",要在终端运行,需要设置该坏境变量(#exportLD_LIBRARY_PATH=/root/workspace/mylib/Debug/),很是不爽。    方法二:先看一段英文:    Onelink option you might use is ld's ``rpath'' option, which specifiesthe runtime library search path of that particular program beingcompiled. From gcc, you can invoke the rpath option by specifyingit this way: -Wl,-rpath,$(DEFAULT_LIB_INSTALL_PATH)Ifyou use this option when building the library client program, youdon't need to bother with LD_LIBRARY_PATH (described next) otherthan to ensure it's not conflicting, or using other techniques tohide the library.   所以我们可以在test中设置中加入一段,即工程Property -> C/C++build -> settings -> GCC CLinker-> Miscellaneous -> Link flags中添加-Wl,-rpath=/root/workspace/mylib/Debug,可完美编译哦...   另外一种让人比较满意的方法三:在工程Property -> C/C++ build-> settings -> GCC CLinker-> Miscellaneous-> other option 中添加-R"${workspace_loc:/mylib/Debug}" Eclipse wbrCDT动态库Shared wbrLibrary配置与使用,解决找不到.so的问题   该方法很不错。是编译阶段做好连接工作,而且可在终端执行(./test)    我使用的方法四:主要是通过配置文件做好一些准备工作后,直接引用lib*.so文件由于Linux动态库的默认搜索路径是/lib和/usr/lib64等类似的目录,如果在这些地方找不到会按照配置文件/etc/ld.so.conf中指定的目录查找,所以我们可以在/etc/ld.so.conf.d目录下创建*.conf(如workspace.conf)配置文件,用来指定我们希望被查找到的lib*.so,如往里写入/root/lib,随自己喜欢,方便管理就好。    在程序运行时,此目录便会被搜寻,我们可以将build好的lib*.so软连接到此,#cd /root/lib/,#ln -s /root/workspace/mylib/Debug/libmylib.so .#ldconfig    这样设置好以后,可以很方便的管理,更重要的是我们再次调用库时就像调用系统的库一样,直接使用,不需要再去针对每一个调用程序做配置,感觉最爽对很多完美主义的朋友是很重要的。 #cd /root/workspace/test/Debug/#ldd test       libmylib.so =>/root/lib/libmylib.so (0x00002b5f040f3000)       libc.so.6 => /lib64/libc.so.6(0x0000003829a00000)       /lib64/ld-linux-x86-64.so.2(0x0000003828a00000) 0 0 在eclipse中加入.a静态链接库及动态库的方法 在eclipse中加入.a静态链接库及动态库的方法 在eclipse中加入.a静态链接库及动态库的方法 vs2005中加入动态链接库的方法 eclipse中静态链接库的 链接 在动态链接库的静态加载方式中,可执行程序引用动态库的全局变量方法 在Linux的Eclipse中编译使用动态链接库 添加动态链接库及静态链接库的方法总结(C++) vs中动态链接库和静态链接库的创建及使用 Make.am中生成.la动态库的同时要链接.a静态库的问题 Make.am中生成.la动态库的同时要链接.a静态库的问题 动态库(.so)链接静态库(.a)的情况总结 动态库(.so)链接静态库(.a)的情况总结 动态库(.so)链接静态库(.a)的情况总结 动态库(.so)链接静态库(.a)的总结 so-a--linux---静态--动态--链接库 linux下动态链接库.so文件 静态链接库.a文件创建及使用 在linux下制作静态库和动态链接库的方法 python-判断某个坐标点是否在三角形内 利用Ruby生成长度为n的随机字符串 Vue-validator安装中遇到的问题 bzoj 2938: [Poi2000]病毒 AC自动机 3dsMax学习笔记1_混合材质制作雕花玻璃材质 在eclipse中加入.a静态链接库及动态库的方法 电影节——并查集 YDB基础 大索引技术大数据的未来 记动态加载商品列表页面(php,mySQL,jq+ajax) Android拍照和录像功能 C++命名空间的几种玩法 Spring应用中的ThreadLocal VS synchronized 八皇后问题(递归实现)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有