NCTU_CS_EDA 板


LINE

如果有想要建立自己的 share library 的话可以参考一下 作者 float (鹏羽) 站内 P-float 标题 建立 动态、静态函式库 时间 2011/11/10 Thu 16:43:27 reference:http://www.vr.ncue.edu.tw/esa/EmbeddedSystemProgramming2010/ch09.htm reference里面比较详细 简介: 函式库(library)是一些事先编译过的函数集合 Linux中标准的系统函数库通常放在目录/lib和/usr/lib,函式库的名称都是以lib开头, 再加上自定的名称,附属档名为.a或.so。名称加上.a的函式库代表这是一个静态的函式 库,名称加上.so的函式库代表这是一个动态的函式库。 静态函式库 libXXXX.a 动态函式库 libXXXX.so 特性 静态函式库:执行时不需要函式库,但档案较大 动态函式库:执行档小 更改程式可以不用重新编译其他程式 甚至可以在执行时修改 动态函式库命名 real name: libXXXX.so.版本代号1.版本代号2.... linker name: 编译器所搜寻的程式库名称, 传统上就是real name删去所有版本号码後的名称, 例如「libXXXX.so」 使用函式库 拿数学函式库举例我们在使用的时候会下像这样的指令 gcc main.c -o main -lm -lm 就是告诉linker我们要link m这个函式库 而m这个函式库的实际档案名称是 libm.a (静态) 接下来用下面三个档案来示范制作动态和静态函式库 ==========main.c========== #include "my_lib.h" int main() { my_printf("abc"); return 0; } ========================== ==========my_lib.h======== #ifndef __MY_LIB_H__ #define __MY_LIB_H__ #include <stdio.h> int my_printf(const char* str); #endif ========================== ==========my_lib.c======== #include "my_lib.h" int my_printf(const char* str) { return printf(str); } ========================== 以上当案可以先用 gcc main.c my_lib.c -o main 编译来测试正确性 接下来第一步将要编成函式库的档案编译但不要link gcc -c my_lib.c -c 参数就是编译但不连结 执行完後会产生 my_lib.o 这时候一样可以这样编译 gcc main.c my_lib.o -o main 如果懒得继续把档案编成什麽函式库是可以这样用就好XD 静态函式库 接下来使用ar指令来产生静态函式库 ar -cru libmy_lib.a my_lib.o 其中参数-cru 用来建立或加入目的档案,c建立静态函数库,r告知ar取代已经存在的目 的档案,u表示取代的目的档案必须比现存的目的档案还新。 这样就可以产出 libmy_lib.a 这个静态函式库 接下来就可以这样使用编译好的函式库 gcc main.c -o main -lmy_lib (视情况加上 -L函式库位置让编译器搜寻的到函式库) 执行 ./main 动态函式库 第一步也是将要编成函式库的档案编译 gcc -fPIC -c my_lib.c 一样产生my_lib.o 加上fPIC的用意好像是让他在记忆体中只有一份可以省空间,这我还要研究一下 不加也是可以完成後面的步骤 在来使用-shared来让gcc建立动态函式库 gcc -shared my_lib.o -o libmy_lib.so 就可得到 libmy_lib.so 这个动态函式库 在来使用方法同上 gcc main.c -o main -lmy_lib (视情况加上 -L函式库位置让编译器搜寻的到函式库) 这时候执行./main应该会发现类似以下错误 ./main: error while loading shared libraries: libmy_lib.so: cannot open shared object file: No such file or directory 这是因为 libmy_lib.so 并不是放在PATH所包含的路径下, 把它搬过去或是在PATH里面加入你想要的位置就可以解决这个问题了 以上 请多指教 还有我发现那个网页好像很多地方打错字= = ==补充== 刚刚自己在实做的时候想到一个问题,如果目录下同时有动态和静态函式库那要gcc会选 哪个? 答案是先选动态,如果希望使用静态的函式库请加上 -static 参数 -- ╔═══╗ ╦ ╔═══╗ ╔═══╗ ╔═╦═╗ ║ ║ ║ ║ ║ ║ ║ ╠══╣ ║ ║ ║ ╠═══╣ ║ ║ ║ ║ ║ ║ ║ ║ ╩ ╩═══╝ ╚═══╝ ╩ ╩ ╩ -- ※ Origin: 成功大学资讯工程学系[醉资心BBS] <goodguy.csie.ncku.edu.tw> ◆ From: 140.116.111.93 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.134.61
1F:推 dnol:实用! 太感谢了! 这篇应该要收 02/10 00:23







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP