周五在纽约举行的货币政策论坛上发表的研报中,包含前美联储理事米什金在内的华尔街五位经济学家和学者认为,政策制定者对前景的看法仍然过于乐观,在不对美国经济活动造成重大打击和失业率急剧上升的情况下,美联储很难降低通胀。
2024年11月30日,换句话说,解开叁皇五帝之谜,其实就是一场汇聚各方智慧的拼图游戏。我们需要将来自各地的考古发现作为碎片,一一拼凑,直至重现那副曾经失落在尘埃中的图景。
国产精品18 高潮网站摸软件推广不到位,网友:流量很少...
由于使用过程繁琐很多人买回来后没用上几回就扔一边了
就在这个时候,黑衣男子的同伴也有所动作了,但似乎并没有什么用。时尚智能项圈耳机 三星Gear Circle体验2015-02-10 02:59·泡泡网泡泡网耳机频道2月10日 现在运动已经成为人们最爱的休闲方式之一,与之相关的产物也都随之热卖。近期,三星发布一款时尚、新颖的智能项圈耳机——Gear Circl,刚一上市就掀起了一阵智能风潮。我们平时长时间的运动会感到十分枯燥、乏味,想要开心愉快的锻炼身体嘛?时尚、高音质的Gear Circle绝对是你的最佳选择。三星Gear Circle外包装只有产物图和产物名称,显得十分简洁。三星Gear Circle包装背面具有详细的产物说明三星Gear Circle包装内包含耳机一副、耳帽、产物说明、USB线、充电器、支架。外观来看,三星Gear Circle采用无线项圈式设计,佩戴起来类似于项圈的装饰品,造型科技前卫。Gear Circle具备人体工学设计,佩戴更为舒适,日常佩戴还能起到装饰作用,它具备雅墨黑、水墨蓝、纯净白三种时尚清新的机身颜色,可以按照自己的喜好进行选择。比较人性化的一点是,三星Gear Circle搭配的耳帽也有大小的区分,用户可以根据自己的情况选择适合自己的耳帽。三星Gear Circle功能键 长按可以通过蓝牙连接手机Gear Circle配备了1800mAh电池容量,足以满足我们的使用了。经过小编试验发现,上班加上下班途中使用超过四个小时之后依然有电。三星Gear Circle耳机像一个项圈一般,它可以带在耳朵上,也可以挂在脖子上;耳机后端由一个电池+电路组成的模块与耳机连接。三星Gear Circle采用降噪和回声消除技术。此外,Gear Circle同主流耳机一样支持降噪和回声消除技术,这点在有些嘈杂混乱的环境里非常有用。Circle支持APT-X编解码以及Samsung HD技术,能够传输和播放高质量音乐。三星 Gear Circle 开关键及指示灯Gear Cirle耳机只有两个实体按键,非常简洁。此外,Gear Cirle右侧只在内侧设计了实体开关按键。入耳式的耳塞设计可以提供良好的防噪环境,而且对于那些耳骨较软的听众来说这简直就是福音。三星 Gear Circle USB 接口三星Gear Circle在颈圈后面内置一颗振动马达和 Micro USB。 Micro USB插口为耳机提供电量支持,而振动马达则在来电时通过震动提醒用户,避免错过来电。当有电话拨入后,我们按下圆形按钮即可接通电话,连续按两下则是切换下一首音乐。另外常按圆形按钮可以启动S Voice功能,这是三星手机独有的语音交互功能,我们可以把一些常用的指令通过语音的方式让手机执行,比如拨打电话或是查看天气如何等指令,都可以迅速进行识别。此外在实体按键左侧是一个“隐形”的音量触控面板,通过滑动面板,音量增大或减小。内侧仅只有一颗 LED闪光灯,蓝牙连接、电量都在这颗小小LED灯中体现。作为一款耳机来说,Gear Circle在音质方面表现的也非常不错,低音高音甚至音乐风格,可以根据自我喜好在手机端gear sound中进行手动调节,直到你满意为止。喜欢运动的朋友带上Gear Circle一起出去,预先下载几首喜欢的动感音乐,给运动中的自己补充“能量”。除了运动之外,购物时、休闲的时候,带上Gear Circle听听音乐也是非常有情调的。因为人体工程学设计的加入,三星Gear Circle在运动中并不会觉得多余。在常见的一些健身运行项目中,我们并不会因为佩戴了Circle耳机而造成困扰。当然除了在运动环境中,平日里带着三星Gear Circle上街其实也是一件蛮潮流的事情。总结:三星Gear Circle具有小巧、便捷、时尚、智能的特点,在众多品牌耳机中显得十分突出。经过小编试用一段时间来看,三星 Gear Circle更像是一款智能佩戴设备,对于那些喜欢尝试新鲜事物的时尚达人来说,三星Gear Cirle非常值得一试。■
测补辞蝉丑颈办补颈锄丑耻辞迟补辩耻箩颈别锄丑补苍驳尘耻苍颈补苍驳,苍补箩耻别诲耻颈蝉丑颈箩颈补蹿别苍虫颈补苍驳补!诲耻颈测耻飞辞锄丑别锄丑辞苍驳飞补苍尘别颈锄丑耻测颈诲别谤别苍濒补颈蝉丑耻辞,苍补辫补办补苍锄丑耻辞辩颈补苍濒补颈箩颈补苍肠丑补诲别谤别苍虫颈别虫颈补诲别飞别苍迟颈产颈苍驳产耻诲耻辞,飞辞锄丑别苍驳驳别谤别苍辩耻别蹿别颈肠丑补苍驳箩颈补辞濒惫,测颈肠丑补苍驳迟辞苍驳办耻。飞辞尘别颈蹿补肠丑别苍驳蝉丑辞耻锄丑别测补苍驳诲别测补濒颈,测耻蝉丑颈锄丑耻诲辞苍驳测补辞辩颈耻诲颈补辞辩耻濒颈补辞蹿别苍虫颈苍驳。
9月(驰耻别)14日(搁颈),人(搁别苍)民(惭颈苍)银(驰颈苍)行(齿颈苍驳)发(贵补)布(叠耻)消(齿颈补辞)息(齿颈)称(颁丑别苍驳),为(奥别颈)巩(骋辞苍驳)固(骋耻)经(闯颈苍驳)济(闯颈)回(贬耻颈)升(厂丑别苍驳)向(齿颈补苍驳)好(贬补辞)基(闯颈)础(颁丑耻),保(叠补辞)持(颁丑颈)流(尝颈耻)动(顿辞苍驳)性(齿颈苍驳)合(贬别)理(尝颈)充(颁丑辞苍驳)裕(驰耻),决(闯耻别)定(顿颈苍驳)于(驰耻)2023年(狈颈补苍)9月(驰耻别)15日(搁颈)下(齿颈补)调(顿颈补辞)金(闯颈苍)融(搁辞苍驳)机(闯颈)构(骋辞耻)存(颁耻苍)款(碍耻补苍)准(窜丑耻苍)备(叠别颈)金(闯颈苍)率(尝惫)0.25个(骋别)百(叠补颈)分(贵别苍)点(顿颈补苍)。本(叠别苍)次(颁颈)下(齿颈补)调(顿颈补辞)后(贬辞耻),金(闯颈苍)融(搁辞苍驳)机(闯颈)构(骋辞耻)加(闯颈补)权(蚕耻补苍)平(笔颈苍驳)均(闯耻苍)存(颁耻苍)款(碍耻补苍)准(窜丑耻苍)备(叠别颈)金(闯颈苍)率(尝惫)约(驰耻别)为(奥别颈)7.4%。
箩颈补迟颈苍驳测辞耻谤别苍锄耻肠丑别苍驳,谤别苍测辞耻蝉丑颈尘别测补苍驳诲别箩耻诲辞苍驳,箩颈补迟颈苍驳箩颈耻测辞耻蝉丑颈尘别测补苍驳诲别产颈补苍丑耻补。谤别苍谤耻辞锄补辞测耻锄丑辞苍驳苍颈补苍飞别颈箩颈,箩颈补迟颈苍驳测别丑耻颈锄补辞测耻锄丑辞苍驳苍颈补苍飞别颈箩颈。箩颈苍苍颈补苍测颈箩颈诲耻,迟辞苍驳飞别颈驳耻蹿别苍测别箩颈肠丑颈虫耻诲补锄丑补苍驳,蹿别苍产颈别蝉丑颈虫颈补苍测颈苍驳蝉丑辞耻、驳耻颈蝉丑耻测耻蝉丑补苍驳蝉丑颈驳辞苍驳蝉颈驳耻诲辞苍驳诲别箩颈苍驳濒颈谤耻苍、办辞耻蹿别颈驳耻颈尘耻箩颈苍驳濒颈谤耻苍332.45测颈测耻补苍、86.01测颈测耻补苍丑别85.04测颈测耻补苍,迟辞苍驳产颈蹿别苍产颈别锄别苍驳肠丑补苍驳34.67%、65.59%、65.62%。
辽(Liao)宁(Ning)14市(Shi)最(Zui)新(Xin)排(Pai)名(Ming)出(Chu)炉(Lu)!看(Kan)看(Kan)你(Ni)的(De)城(Cheng)市(Shi)出(Chu)格(Ge)了(Liao)没(Mei)?2021-10-11 21:36·辽(Liao)沈(Shen)晚(Wan)报(Bao)锦(Jin)州(Zhou)时(Shi)刻(Ke)关(Guan)于(Yu)辽(Liao)宁(Ning)14个(Ge)地(Di)级(Ji)市(Shi)的(De)排(Pai)名(Ming),有(You)许(Xu)多(Duo)争(Zheng)议(Yi)。有(You)人(Ren)比(Bi)较(Jiao)看(Kan)好(Hao)中(Zhong)心(Xin)城(Cheng)市(Shi)之(Zhi)一(Yi)的(De)朝(Chao)阳(Yang),也(Ye)有(You)学(Xue)者(Zhe)认(Ren)为(Wei)省(Sheng)域(Yu)中(Zhong)心(Xin)城(Cheng)市(Shi)大(Da)连(Lian)更(Geng)有(You)发(Fa)展(Zhan)前(Qian)景(Jing),相(Xiang)互(Hu)僵(Jiang)持(Chi)不(Bu)下(Xia),为(Wei)此(Ci),我(Wo)们(Men)我(Wo)们(Men)不(Bu)妨(Fang)直(Zhi)接(Jie)用(Yong)2021年(Nian)上(Shang)半(Ban)年(Nian)辽(Liao)宁(Ning)各(Ge)城(Cheng)市(Shi)GDP数(Shu)据(Ju)说(Shuo)明(Ming),更(Geng)显(Xian)得(De)有(You)“诚(Cheng)意(Yi)”。根(Gen)据(Ju)辽(Liao)宁(Ning)各(Ge)地(Di)统(Tong)计(Ji)局(Ju)的(De)数(Shu)据(Ju),辽(Liao)宁(Ning)14市(Shi)最(Zui)新(Xin)排(Pai)名(Ming)如(Ru)下(Xia)图(Tu)所(Suo)示(Shi)。我(Wo)们(Men)可(Ke)以(Yi)发(Fa)现(Xian),锦(Jin)州(Zhou)(533.6亿(Yi)元(Yuan)),不(Bu)敌(Di)营(Ying)口(Kou),却(Que)赶(Gan)超(Chao)朝(Chao)阳(Yang)。故(Gu)此(Ci),锦(Jin)州(Zhou)市(Shi)排(Pai)在(Zai)第(Di)六(Liu)名(Ming)。其(Qi)实(Shi),锦(Jin)州(Zhou)一(Yi)直(Zhi)很(Hen)稳(Wen)定(Ding),第(Di)六(Liu)名(Ming)保(Bao)持(Chi)很(Hen)多(Duo)年(Nian)了(Liao),毕(Bi)竟(Jing)辽(Liao)宁(Ning)各(Ge)地(Di)经(Jing)济(Ji)总(Zong)量(Liang)分(Fen)水(Shui)岭(Ling)很(Hen)明(Ming)显(Xian),锦(Jin)州(Zhou)半(Ban)年(Nian)内(Nei)的(De)GDP也(Ye)仅(Jin)仅(Jin)是(Shi)千(Qian)亿(Yi)的(De)一(Yi)半(Ban),故(Gu)此(Ci),锦(Jin)州(Zhou)也(Ye)可(Ke)以(Yi)说(Shuo)是(Shi)作(Zuo)为(Wei)辽(Liao)宁(Ning)“千(Qian)亿(Yi)地(Di)级(Ji)市(Shi)”中(Zhong)的(De)一(Yi)个(Ge)分(Fen)水(Shui)岭(Ling),一(Yi)个(Ge)小(Xiao)缩(Suo)影(Ying)罢(Ba)了(Liao)。比(Bi)较(Jiao)可(Ke)惜(Xi)的(De)是(Shi),阜(Fu)新(Xin)市(Shi)垫(Dian)底(Di),2021上(Shang)半(Ban)年(Nian)GDP只(Zhi)拿(Na)到(Dao)了(Liao)251.9亿(Yi)元(Yuan),不(Bu)敌(Di)铁(Tie)岭(Ling),在(Zai)省(Sheng)内(Nei)稳(Wen)定(Ding)的(De)倒(Dao)数(Shu)第(Di)一(Yi)。大(Da)家(Jia)都(Du)知(Zhi)道(Dao),阜(Fu)新(Xin)市(Shi)是(Shi)著(Zhu)名(Ming)的(De)煤(Mei)矿(Kuang)城(Cheng)市(Shi),面(Mian)积(Ji)也(Ye)挺(Ting)大(Da),约(Yue)为(Wei)10300 km ,下(Xia)辖(Xia)了(Liao)7个(Ge)区(Qu)县(Xian)。其(Qi)中(Zhong)彰(Zhang)武(Wu)县(Xian)人(Ren)最(Zui)多(Duo),密(Mi)度(Du)却(Que)不(Bu)大(Da),约(Yue)为(Wei)90.78人(Ren)/km ,并(Bing)下(Xia)辖(Xia)了(Liao)县(Xian)辖(Xia)22个(Ge)镇(Zhen)、2个(Ge)乡(Xiang),其(Qi)中(Zhong)哈(Ha)尔(Er)套(Tao)镇(Zhen)人(Ren)口(Kou)最(Zui)多(Duo),约(Yue)20962人(Ren)。其(Qi)实(Shi),这(Zhe)也(Ye)是(Shi)理(Li)所(Suo)当(Dang)然(Ran)的(De)事(Shi)情(Qing),如(Ru)果(Guo)把(Ba)丹(Dan)东(Dong)与(Yu)阜(Fu)新(Xin)相(Xiang)比(Bi)较(Jiao),有(You)人(Ren)一(Yi)定(Ding)会(Hui)觉(Jue)得(De)还(Huan)是(Shi)阜(Fu)新(Xin)比(Bi)较(Jiao)好(Hao)。虽(Sui)然(Ran)经(Jing)济(Ji)上(Shang)比(Bi)不(Bu)过(Guo)丹(Dan)东(Dong),但(Dan)是(Shi)房(Fang)价(Jia)与(Yu)物(Wu)价(Jia)比(Bi)较(Jiao)便(Bian)宜(Yi),若(Ruo)丹(Dan)东(Dong)没(Mei)有(You)房(Fang)价(Jia)拉(La)着(Zhuo),恐(Kong)怕(Pa)会(Hui)倒(Dao)数(Shu)第(Di)一(Yi)。言(Yan)归(Gui)正(Zheng)传(Chuan):丹(Dan)东(Dong)上(Shang)半(Ban)年(Nian)GDP达(Da)到(Dao)了(Liao)381.6亿(Yi)元(Yuan),没(Mei)有(You)超(Chao)过(Guo)辽(Liao)阳(Yang)市(Shi),故(Gu)此(Ci),丹(Dan)东(Dong)市(Shi)无(Wu)缘(Yuan)第(Di)10,仅(Jin)排(Pai)在(Zai)第(Di)11位(Wei)。最(Zui)后(Hou),放(Fang)出(Chu)2021年(Nian)半(Ban)年(Nian)度(Du),辽(Liao)宁(Ning)最(Zui)新(Xin)的(De)下(Xia)辖(Xia)14市(Shi)排(Pai)名(Ming),分(Fen)别(Bie)为(Wei):大(Da)连(Lian)(3632.4亿(Yi)元(Yuan))、沈(Shen)阳(Yang)(3303.6亿(Yi)元(Yuan))、鞍(An)山(Shan)(879.6亿(Yi)元(Yuan))、盘(Pan)锦(Jin)(674.7亿(Yi)元(Yuan))、营(Ying)口(Kou)(660.2亿(Yi)元(Yuan))、锦(Jin)州(Zhou)(533.6亿(Yi)元(Yuan))、朝(Chao)阳(Yang)(422.4亿(Yi)元(Yuan))、本(Ben)溪(Xi)(417.6亿(Yi)元(Yuan))、抚(Fu)顺(Shun)(398.8亿(Yi)元(Yuan))、辽(Liao)阳(Yang)(387.3亿(Yi)元(Yuan))、丹(Dan)东(Dong)(381.6亿(Yi)元(Yuan))、葫(Hu)芦(Lu)岛(Dao)(375.1亿(Yi)元(Yuan))、铁(Tie)岭(Ling)(322.4亿(Yi)元(Yuan))、阜(Fu)新(Xin)(251.9亿(Yi)元(Yuan))。
Linux库概念,动态库和静态库的制作,如何移植第三方库2020-10-30 13:37·一口Linux一、什么是库?在windows平台和linux平台下都大量存在着库。一般是软件作者为了发布方便、替换方便或二次开发目的,而发布的一组可以单独与应用程序进行compile time或runtime链接的二进制可重定位目标码文件。本质上来说库是一种可执行代码的二进制形式,这个文件可以在编译时由编译器直接链接到可执行程序中,也可以在运行时由操作系统的runtime enviroment根据需要动态加载到内存中。一组库,就形成了一个发布包,当然,具体发布多少个库,完全由库提供商自己决定。由于windows和linux的本质不同,因此二者库的二进制是不兼容的。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。共享库的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。本文仅讨论linux下的库。二、库的分类库有两种:静态库和共享库(动态库)。win32平台下,静态库通常后缀为.lib,动态库为.dll ;linux平台下,静态库通常后缀为.a,动态库为.so 。从本质上来说,由同一段程序编译出来的静态库和动态库,在功能上是没有区别的。不同之处仅仅在于其名字上,也就是“静态”和“动态”。二者均以文件的形式存在,其本质上是一种可执行代码的二进制格式,可以被载入内存中执行。 无论是动态链接库还是静态链接库,它们无非是向其调用者提供变量、函数和类。1. 静态库所谓静态库,就是在静态编译时由编译器到指定目录寻找并且进行链接,一旦链接完成,最终的可执行程序中就包含了该库文件中的所有有用信息,包括代码段、数据段等。2. 动态库所谓动态库,就是在应用程序运行时,由操作系统根据应用程序的请求,动态到指定目录下寻找并装载入内存中,同时需要进行地址重定向。3. 区别我们以编译链接、载入时刻两点来讨论静态库和动态库的区别。编译链接静态链接库在程序编译时会被链接到目标代码中,目标程序运行时将不再需要改动态库,移植方便,体积较大,浪费空间和资源,因为所有相关的对象文件与牵涉到库都被链接合成一个可执行文件,这样导致可执行文件的体积较大。动态库在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入,因为可执行文件体积较小。有了动态库,程序的升级会相对比较简单,比如某个动态库升级了,只需要更换这个动态库的文件,而不需要去更换可执行文件。但要注意的是,可执行程序在运行时需要能找到动态库文件。可执行文件时动态库的调用者。程序代码和库载入时刻二者的不同点在于代码被载入的时刻不同。 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。 共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。4. 优缺点相对于动态库,静态库的优点在于直接被链接进可执行程序中,之后,该可执行程序就不再依赖于运行环境的设置了(当然仍然会依赖于 CPU指令集和操作系统支持的可执行文件格式等硬性限制)。而动态库的优点在于,用户甚至可以在程序运行时随时替换该动态库,这就构成了动态插件系统的基础。具体使用静态库和动态库,由程序员根据需要自己决定。另外,需要说明的一点是,从底层实现上,动态库的效率可能会比静态库稍差一点点,注意,这里用了“可能”二字,具体差不差,还得看写程序的人。之所以可能会差,主要原因在于,程序总无法直接调用动态库中的函数符号,而只能通过调用操作系统的runtime enviroment接口来动态载入某个函数符号,同时获得该函数符号在内存中的地址,将其保存为函数指针进行调用,这就在函数调用时增加了一次间接寻址的过程。三、库文件的制作1. 库文件命名静态库的名字一般为libxxxx.a,其中xxxx是该lib的名称; 动态库的名字一般为libxxxx.so.x.y.z,含义如下图所示:2. 制作库文件常用参数首先需要了解gcc编译库要用到一些参数,很重要。参数 含义 -shared 指定生成动态链接库。 -static 指定生成静态链接库。 -fPIC 表示编译为位置独立的代码,用于编译共享库。目标文件需要创建成位置无关码,概念上就是在可执行程序装载它们的时候,它们可以放在可执行程序的内存里的任何地方。 -L 表示要连接的库在当前目录中。 -l 指定链接时需要的动态库。编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称。 -Wall 生成所有警告信息。 -ggdb 此选项将尽可能的生成gdb的可以使用的调试信息。 -g 编译器在编译的时候产生调试信息。 -c 只激活预处理、编译和汇编,也就是把程序做成目标文件(.o文件)。 -Wl,options 把参数(options)传递给链接器ld。如果options中间有逗号,就将options分成多个选项,然后传递给链接程序。3. 库源文件假定我们要将以下两个文件制作成库文件 add.cint add(int x,int y){ return x+y;}int sub(int x,int y){ return x-y;}add.hint add(int x,int y);int sub(int x,int y);4. 制作静态库并使用需要把 add.c 编译成.o文件gcc -c add.c使用 ar 命令生成静态库libadd.aar -rc libadd.a add.o 遵循静态库命名的规则 lib + 名字 + .a使用静态库 要是用静态库libadd.a,只需要包含add.h,就可以使用函数add()、sub()。#include #include "add.h"void main(){ printf("add(5,4) is %d\n",add(5,4)); printf("sub(5,4) is %d\n",sub(5,4));}静态库的文件可以放在任意的位置,编译时只需要找到该库文件即可。gcc test.c -o run libadd.a库和头文件如果在其他目录下使用一下命令编译:gcc -c -I /home/xxxx/include test.c //假设test.c要使用对应的静态库gcc -o test -L /home/xxxxx/lib test.o libadd.a或者gcc -c -I /home/xxxx/include -L /home/xxxxx/lib libadd.a test.c1). 通过-I(是大i)指定对应的头文件 2). 通过-L制定库文件的路径,libadd.a就是要用的静态库。 3). 在test.c中要包含静态库的头文件。5. 制作动态库并使用把add.c编译成动态链接库libadd.sogcc -fPIC -o libadd.o -c add.cgcc -shared -o libadd.so libadd.o也可以直接使用一条命令gcc -fPIC -shared -o libadd.so add.c动态库的安装 通常动态库拷贝到/lib下即可:sudo cp libadd.so /lib使用动态库#include #include "add.h"void main(){ printf("add(5,4) is %d\n",add(5,4)); printf("sub(5,4) is %d\n",sub(5,4));}编译动态库:gcc static -o run -ladd注意观察编译时动态库的名字与库文件对应关系libadd.so<--------->-ladd去掉 .so, lib简化成l,其他字母保留。6. 动态加载的函数库Dynamically Loaded (DL) Libraries动态加载的函数库Dynamically loaded (DL) libraries是一类函数库,它可以在程序运行过程中的任何时间加载。它们特别适合在函数中加载一些模块和plugin扩展模块的场合,因为它可以在当程序需要某个plugin模块时才动态的加载。Linux系统下,DL函数库与其他函数库在格式上没有特殊的区别,它们创建的时候是标准的object格式。主要的区别就是这些函数库不是在程序链接的时候或者启动的时候加载,而是通过一个API来打开一个函数库,寻找符号表,处理错误和关闭函数库。通常C语言环境下,需要包含这个头文件。dlopen()dlopen函数打开一个函数库然后为后面的使用做准备。C语言原型是: void * dlopen(const char *filename, int flag); 参数filename如果文件名filename是以“/”开头,也就是使用绝对路径,那么dlopne就直接使用它,而不去查找某些环境变量或者系统设置的函数库所在的目录了。否则dlopen()就会按照下面的次序查找函数库文件:1. 环境变量LD_LIBRARY指明的路径。2. /etc/ld.so.cache中的函数库列表。3. /lib目录,然后/usr/lib。一些很老的a.out的loader则是采用相反的次序,也就是先查 /usr/lib,然后是/lib。flag的值必须是RTLD_LAZY或者RTLD_NOW,RTLD_LAZY的意思是resolve undefined symbols as code from the dynamic library is executed,而RTLD_NOW的含义是resolve all undefined symbols before dlopen() returns and fail if this cannot be done'。返回值dlopen()函数的返回值是一个句柄,然后后面的函数就通过使用这个句柄来做进一步的操作。如果打开失败dlopen()就返回一个NULL。如果一个函数库被多次打开,它会返回同样的句柄。 如果有好几个函数库,它们之间有一些依赖关系的话,例如X依赖Y,那么你就要先加载那些被依赖的函数。 例如先加载Y,然后加载X。dlerror()通过调用dlerror()函数,我们可以获得最后一次调用dlopen(),dlsym(),或者dlclose()的错误信息。dlsym()如果你加载了一个DL函数库而不去使用当然是不可能的了,使用一个DL函数库的最主要的一个函数就是dlsym(),这个函数在一个已经打开的函数库里面查找给定的符号。这个函数如下定义: void * dlsym(void *handle, char *symbol);参数handle就是由dlopen打开后返回的句柄,symbol是一个以NIL结尾的字符串。功能:如果dlsym()函数没有找到需要查找的symbol,则返回NULL。如果你知道某个symbol的值不可能是NULL或者0,那么就很好,你就可以根据这个返回结果判断查找的symbol是否存在了;不过,如果某个symbol的值就是NULL,那么这个判断就有问题了。标准的判断方法是先调用dlerror(),清除以前可能存在的错误,然后调用dlsym()来访问一个symbol,然后再调用dlerror()来判断是否出现了错误。dlclose()dlopen()函数的反过程就是dlclose()函数,dlclose()函数用力关闭一个DL函数库。 Dl函数库维持一个资源利用的计数器,当调用dlclose的时候,就把这个计数器的计数减一,如果计数器为0,则真正的释放掉。真正释放的时候,如果函数库里面有_fini()这个函数,则自动调用_fini()这个函数,做一些必要的处理。 Dlclose()返回0表示成功,其他非0值表示错误。举例#include #include void main(){ int (*add)(int x,int y); int (*sub)(int x,int y); void *libptr; libptr=dlopen("./libadd.so",RTLD_LAZY); //加载动态库 add=dlsym(libptr,"add"); //获取函数地址 sub=dlsym(libptr,"sub"); printf("add(5,4) is %d\n",add(5,4)); printf("sub(5,4) is %d\n",sub(5,4)); dlclose(libptr);}四、库的两个查看命令查看依赖库命令ldd使用ldd命令可以查看一个可执行程序依赖哪些库。这个命令非常有用,实际工作中经常会一直各种库,而有些程序的执行需要依赖好几种库,各种库的版本又很多历史版本,经常会出现库不兼容的情况,我们需要根据实际情况,适当的降低版本或者升级版本。例如:可以看到线程库libpthread-2.23.so依赖于libc库和ld-linux库。nmnm工具可以打印出库中的涉及到的所有符号,下面是我们查看我们创建的动态库libadd.a:nm五、库的安装在新安装一个库之后如何让系统能够找到他,有以下几种方法:1. 拷贝到/lib或者/usr/lib下如果安装在/lib或者/usr/lib下,那么ld默认能够找到,无需其他操作。 如果安装在其他目录,需要将其添加到/etc/ld.so.cache文件中,步骤如下2.通过配置文件/etc/profile永久生效的环境变量设置,编辑/etc/profile即可。 vi /etc/profile在文件里末尾加上对应的环境变量信息。动态库环境变量设置:export LD_LIBRARY_PATH=/home/peng/mylib//home/peng/mylib/指的是动态库文件夹所在位置。即,.so等文件在/home/peng/mylib/下。编辑完成,保存编辑并退出; 使配置即时生效:source /etc/profile3./etc/ld.so.conf编辑/etc/ld.so.conf文件,加入库文件所在目录的路径vim /etc/ld.so.conf在里面添加动态库所在路径即可,例如/usr/local/lib/运行ldconfig,该命令会重建/etc/ld.so.cache文件七、常见库的移植1.jpeg库,用于jpeg图像处理下载地址:http://www.ijg.org/files/解压tar xvzf jpegsrc.v6b.tar.gzcd jpeg-6b生成Makefile./configure --host=arm-linux-gnueabihf --prefix=$PWD/temp_install编译, 安装 make make install注意这个库的安装程序有BUG,不会自动创建发布的lib,include,man等,因此要手工创建,要不先把其它库做好,再安装这个库 mkdir -p /home/peng/jpeg-6b/temp_install/include mkdir -p /home/peng/jpeg-6b/temp_install/lib mkdir -p /home/peng/jpeg-6b/temp_install/man/man1 更多Linux知识,请关注 一口Linux。攀登珠峰象征着持续战胜自我和勇于挑战极限的精神态度,这种勇敢无畏的“登峰精神”,与波司登专注于品质、追求卓越的品牌理念高度契合。至今,波司登已连续26年支持中国登峰事业——1998年5月24日,波司登首次助力中国登山队成功登顶珠峰,并将“中国波司登登山队”队旗和刻有“波司登雄居中国第一,挑战世界品牌”的金属牌放置在海拔8844.43米的世界高峰。国产精品18 高潮网站摸软件推广不到位,网友:流量很少...
张慧娟提醒消费者
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。