青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0
當(dāng)我們的程序中有經(jīng)常使用的模塊,而且這種模塊在其他程序中也會(huì)用到,這時(shí)按照軟件重用的思想,我們應(yīng)該將它們生成庫(kù),使得以后編程可以減少開(kāi)發(fā)代 碼量。這里介紹兩個(gè)命令ar和nm,用來(lái)對(duì)庫(kù)操作。

  1、ar基本用法
  ar命令可以用來(lái)創(chuàng)建、修改庫(kù),也可以從庫(kù)中提出單個(gè)模塊。庫(kù)是一單獨(dú)的文 件,里面包含了按照特定的結(jié)構(gòu)組織起來(lái)的其它的一些文件(稱(chēng)做此庫(kù)文件的member)。原始文件的內(nèi)容、模式、時(shí)間戳、屬主、組等屬性都保留在庫(kù)文件 中。
  下面是ar命令的格式:
  ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive files...
  例如我們可以用ar rv libtest.a hello.o hello1.o來(lái)生成一個(gè)庫(kù),庫(kù)名字是test,鏈接時(shí)可以用-ltest鏈接。該庫(kù)中存放了兩個(gè)模塊hello.o和hello1.o。選項(xiàng)前可以有 ‘-’字符,也可以沒(méi)有。下面我們來(lái)看看命令的操作選項(xiàng)和任選項(xiàng)。現(xiàn)在我們把{dmpqrtx}部分稱(chēng)為操作選項(xiàng),而[abcfilNoPsSuvV]部 分稱(chēng)為任選項(xiàng)。
  {dmpqrtx}中的操作選項(xiàng)在命令中只能并且必須使用其中一個(gè),它們的含義如下:
  d:從庫(kù)中刪除模塊。按模塊 原來(lái)的文件名指定要?jiǎng)h除的模塊。如果使用了任選項(xiàng)v則列出被刪除的每個(gè)模塊。
  m:該操作是在一個(gè)庫(kù)中移動(dòng)成員。當(dāng)庫(kù)中如果有若干模塊有相同的 符號(hào)定義(如函數(shù)定義),則成員的位置順序很重要。如果沒(méi)有指定任選項(xiàng),任何指定的成員將移到庫(kù)的最后。也可以使用’a’,’b’,或’I’任選項(xiàng)移動(dòng)到 指定的位置。
  p:顯示庫(kù)中指定的成員到標(biāo)準(zhǔn)輸出。如果指定任選項(xiàng)v,則在輸出成員的內(nèi)容前,將顯示成員的名字。如果沒(méi)有指定成員的名字,所 有庫(kù)中的文件將顯示出來(lái)。
  q:快速追加。增加新模塊到庫(kù)的結(jié)尾處。并不檢查是否需要替換。’a’,’b’,或’I’任選項(xiàng)對(duì)此操作沒(méi)有影 響,模塊總是追加的庫(kù)的結(jié)尾處。如果使用了任選項(xiàng)v則列出每個(gè)模塊。 這時(shí),庫(kù)的符號(hào)表沒(méi)有更新,可以用’ar s’或ranlib來(lái)更新庫(kù)的符號(hào)表索引。
  r:在庫(kù)中插入模塊(替換)。當(dāng)插入的模塊名已經(jīng)在庫(kù)中存在,則替換同名的模塊。如果若干模塊中 有一個(gè)模塊在庫(kù)中不存在,ar顯示一個(gè)錯(cuò)誤消息,并不替換其他同名模塊。默認(rèn)的情況下,新的成員增加在庫(kù)的結(jié)尾處,可以使用其他任選項(xiàng)來(lái)改變?cè)黾拥奈恢谩?
  t:顯示庫(kù)的模塊表清單。一般只顯示模塊名。
  x:從庫(kù)中提取一個(gè)成員。如果不指定要提取的模塊,則提取庫(kù)中所有的模塊。

  下面在看看可與操作選項(xiàng)結(jié)合使用的任選項(xiàng):
  a:在庫(kù)的一個(gè)已經(jīng)存在的成員后面增加一個(gè)新的文件。如果使用任選項(xiàng)a,則應(yīng)該為命 令行中membername參數(shù)指定一個(gè)已經(jīng)存在的成員名。
  b:在庫(kù)的一個(gè)已經(jīng)存在的成員前面增加一個(gè)新的文件。如果使用任選項(xiàng)b,則應(yīng)該 為命令行中membername參數(shù)指定一個(gè)已經(jīng)存在的成員名。
  c:創(chuàng)建一個(gè)庫(kù)。不管庫(kù)是否存在,都將創(chuàng)建。
  f:在庫(kù)中截短指 定的名字。缺省情況下,文件名的長(zhǎng)度是不受限制的,可以使用此參數(shù)將文件名截短,以保證與其它系統(tǒng)的兼容。
  i:在庫(kù)的一個(gè)已經(jīng)存在的成員前 面增加一個(gè)新的文件。如果使用任選項(xiàng)i,則應(yīng)該為命令行中membername參數(shù)指定一個(gè)已經(jīng)存在的成員名(類(lèi)似任選項(xiàng)b)。
  l:暫未使 用
  N:與count參數(shù)一起使用,在庫(kù)中有多個(gè)相同的文件名時(shí)指定提取或輸出的個(gè)數(shù)。
  o:當(dāng)提取成員時(shí),保留成員的原始數(shù) 據(jù)。如果不指定該任選項(xiàng),則提取出的模塊的時(shí)間將標(biāo)為提取出的時(shí)間。
  P:進(jìn)行文件名匹配時(shí)使用全路徑名。ar在創(chuàng)建庫(kù)時(shí)不能使用全路徑名 (這樣的庫(kù)文件不符合POSIX標(biāo)準(zhǔn)),但是有些工具可以。
  s:寫(xiě)入一個(gè)目標(biāo)文件索引到庫(kù)中,或者更新一個(gè)存在的目標(biāo)文件索引。甚至對(duì)于沒(méi) 有任何變化的庫(kù)也作該動(dòng)作。對(duì)一個(gè)庫(kù)做ar s等同于對(duì)該庫(kù)做ranlib。
  S:不創(chuàng)建目標(biāo)文件索引,這在創(chuàng)建較大的庫(kù)時(shí)能加快時(shí)間。
u:一般說(shuō)來(lái),命令ar r…插入所有列出的文件到庫(kù)中,如果你只想插入列出文件中那些比庫(kù)中同名文件新的文件,就可以使用該任選項(xiàng)。該任選項(xiàng)只用于r操作選項(xiàng)。
v:該選項(xiàng)用來(lái)顯示執(zhí)行操作選項(xiàng)的附加信息。
  V:顯示ar的版本。

  2、nm基本用法命令
nm用來(lái)列出目標(biāo)文件的符號(hào)清單。下面是nm命令的格式:
  nm [-a|--debug-syms] [-g|--extern-only] [-B][-C|--demangle] [-D|--dynamic] [-s|--print-armap][-o|--print-file-name] [-n|--numeric-sort][-p|--no-sort] [-r|--reverse-sort] [--size-sort][-u|--undefined-only] [-l|--line-numbers] [--help][--version] [-t radix|--radix=radix][-P|--portability] [-f format|--format=format][--target=bfdname] [objfile...]
  如果沒(méi)有為nm命令指出目 標(biāo)文件,則nm假定目標(biāo)文件是a.out。下面列出該命令的任選項(xiàng),大部分支持“-”開(kāi)頭的短格式和“—“開(kāi)頭的長(zhǎng)格式。
  -A、-o或 --print-file-name:在找到的各個(gè)符號(hào)的名字前加上文件名,而不是在此文件的所有符號(hào)前只出現(xiàn)文件名一次。
  例如nm libtest.a的輸出如下:
  CPThread.o:
  00000068 T Main__8CPThreadPv
00000038 T Start__8CPThread
  00000014 T _._8CPThread
  00000000 T __8CPThread
  00000000 ? __FRAME_BEGIN__
  …………………………………
  則nm –A 的輸出如下:
  libtest.a:CPThread.o:00000068 T Main__8CPThreadPv
libtest.a:CPThread.o:00000038 T Start__8CPThread
libtest.a:CPThread.o:00000014 T _._8CPThread
libtest.a:CPThread.o:00000000 T __8CPThread
libtest.a:CPThread.o:00000000 ? __FRAME_BEGIN__
…………………………………………………………
  -a或--debug-syms:顯示調(diào)試符號(hào)。
  -B:等同于 --format=bsd,用來(lái)兼容MIPS的nm。
  -C或--demangle:將低級(jí)符號(hào)名解碼(demangle)成用戶(hù)級(jí)名字。這 樣可以使得C++函數(shù)名具有可讀性。
  -D或--dynamic:顯示動(dòng)態(tài)符號(hào)。該任選項(xiàng)僅對(duì)于動(dòng)態(tài)目標(biāo)(例如特定類(lèi)型的共享庫(kù))有意義。
-f format:使用format格式輸出。format可以選取bsd、sysv或posix,該選項(xiàng)在GNU的nm中有用。默認(rèn)為bsd。
-g或--extern-only:僅顯示外部符號(hào)。
  -n、-v或--numeric-sort:按符號(hào)對(duì)應(yīng)地址的順序排序,而非按符號(hào) 名的字符順序。
  -p或--no-sort:按目標(biāo)文件中遇到的符號(hào)順序顯示,不排序。
  -P或--portability:使 用POSIX.2標(biāo)準(zhǔn)輸出格式代替默認(rèn)的輸出格式。等同于使用任選項(xiàng)-f posix。
  -s或--print-armap:當(dāng)列出庫(kù)中成員的 符號(hào)時(shí),包含索引。索引的內(nèi)容包含:哪些模塊包含哪些名字的映射。
  -r或--reverse-sort:反轉(zhuǎn)排序的順序(例如,升序變?yōu)榻? 序)。
  --size-sort:按大小排列符號(hào)順序。該大小是按照一個(gè)符號(hào)的值與它下一個(gè)符號(hào)的值進(jìn)行計(jì)算的。
  -t radix或--radix=radix:使用radix進(jìn)制顯示符號(hào)值。radix只能為“d”表示十進(jìn)制、“o”表示八進(jìn)制或“x”表示十六進(jìn)制。
--target=bfdname:指定一個(gè)目標(biāo)代碼的格式,而非使用系統(tǒng)的默認(rèn)格式。
  -u或--undefined-only:僅顯示 沒(méi)有定義的符號(hào)(那些外部符號(hào))。
  -l或--line-numbers:對(duì)每個(gè)符號(hào),使用調(diào)試信息來(lái)試圖找到文件名和行號(hào)。對(duì)于已定義的符 號(hào),查找符號(hào)地址的行號(hào)。對(duì)于未定義符號(hào),查找指向符號(hào)重定位入口的行號(hào)。如果可以找到行號(hào)信息,顯示在符號(hào)信息之后。
  -V或 --version:顯示nm的版本號(hào)。
  --help:顯示nm的任選項(xiàng)。

   3、示例
  1)、創(chuàng)建靜態(tài)庫(kù):
  gcc -c hello.c -o hello.o
ar rcs libhello.a hello.o

  2)、使用靜態(tài)庫(kù):
  gcc -o test test.c -static -L. -lhello

  3)、共享庫(kù)版本: version.minor.release

4)、構(gòu)建動(dòng)態(tài)共享庫(kù):
  gcc/g++下加 -fPIC -shared 參數(shù)即可
  其中 -fPIC 作用于編譯階段,告訴編譯器產(chǎn)生與位置無(wú)關(guān)代碼(Position-Independent Code),則產(chǎn)生的代碼中,沒(méi)有絕對(duì)地址,全部使用相對(duì)地址,故而代碼可以被加載器加載到內(nèi)存的任意位置,都可以正確的執(zhí)行。這正是共享庫(kù)所要求的,共 享庫(kù)被加載時(shí),在內(nèi)存的位置不是固定的。
  可以export LD_DEBUG=files,查看每次加載共享庫(kù)的實(shí)際地址。
  其中 -shared 作用于鏈接階段,實(shí)際傳遞給鏈接器ld,讓其添加作為共享庫(kù)所需要的額外描述信息,去除共享庫(kù)所不需的信息。
  可以分解為如 下步驟:
  I. gcc -c err.c -fPIC -o err.o
  II. gcc -shared -o liberr.so.0.0 err.o
  II <==> ld -Bshareable -o liberr.so.0.0 err.o
  III. ln -s liberr.so.0.0 liberr.so

  5)、動(dòng)態(tài)共享庫(kù)的使用:
由共享庫(kù)加載器自動(dòng)加載
  gcc -o test test.c -lerr -L. -Wl,-rpath=./
-Wl,option
  Pass option as an option to the linker. If option contains commas, it is split into multiple options at the commas.
-rpath: 指定運(yùn)行時(shí)搜索動(dòng)態(tài)庫(kù)的路徑,可以用環(huán)境變量LD_LIBRARY_PATH指定。

  程序自己控制加載、符號(hào)解析(使 用libc6之dl庫(kù))
  gcc cos.c -o cos -ldl
  /* cos.c */
    #include <stdio.h>
    #include <dlfcn.h>
  int main()
  {
void *handle;
    double (*cosine)(double);
    char *error;
double rev;

    handle = dlopen("libm.so", RTLD_LAZY); // 加載動(dòng)態(tài)庫(kù)
if(!handle)
    {
      fprintf(stderr, "%s\n", dlerror());
exit(1);
    }

    dlerror();

    cosine = dlsym(handle, "cos"); // 解析符號(hào)cos
    if((error = dlerror()) != NULL)
    {
      fprintf(stderr, "%s\n", error);
exit(1);
    }

    rev = cosine(3.1415926); // 使用cos函數(shù)
    printf("The cos result is: %f\n", rev);

    dlclose(handle);

return 0;
  }

  6)、GNU/Linux下動(dòng)態(tài)庫(kù)之加載器為/lib/ld-linux.so, 可執(zhí)行的。
  /lib/ld-linux.so ./cos <===> ./cos

  7)、有用的環(huán)境變 量     
  LD_LIBRARY_PATH
  指定運(yùn)行時(shí)動(dòng)態(tài)庫(kù)的搜索路徑
  LD_DEBUG
  調(diào)試用,其值 可為:
  libs     display library search paths
  reloc     display relocation processing
  files     display progress for input file
symbols   display symbol table processing
  bindings   display information about symbol binding
  versions   display version dependencies
  all       all previous options combined
statistics display relocation statistics
  unused     determined unused DSOs
  help     display this help message and exit

8)、搜索含有cos函數(shù)的共享庫(kù)名 
  nm -AD /lib/* /usr/lib/* 2>/dev/null | grep "cos$"
  nm -- 從對(duì)象文件中列出符號(hào)。

  9)、讀取ELF文件格式信息
  readelf -Ds ./libfoo.so #讀出共享庫(kù)的符號(hào)

from:
http://fnstudio.blog.sohu.com/74541293.html

posted on 2010-05-06 22:32 chatler 閱讀(840) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Linux_Coding
<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用鏈接

留言簿(10)

隨筆分類(lèi)(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺(jué)這個(gè)博客還是不錯(cuò),雖然做的東西和我不大相關(guān),覺(jué)得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区三区四区中文| 亚洲国产va精品久久久不卡综合| 美女亚洲精品| 午夜精品视频| 日韩午夜av| 欧美高清视频免费观看| 久久狠狠亚洲综合| 亚洲性图久久| 亚洲精品在线三区| 亚洲国产日本| 激情另类综合| 国产一区二区三区四区五区美女| 国产精品草草| 欧美视频一区在线| 欧美精品videossex性护士| 久久久久久免费| 久久gogo国模裸体人体| 亚洲欧美日产图| 亚洲一区观看| 亚洲综合精品自拍| 亚洲性夜色噜噜噜7777| 一区二区三区视频在线| 亚洲精品美女在线观看| 亚洲电影av在线| 亚洲高清在线播放| 欧美激情欧美狂野欧美精品 | 亚洲精品欧美日韩| 亚洲高清资源| 亚洲国产成人精品女人久久久| 免费不卡在线观看av| 猫咪成人在线观看| 麻豆成人小视频| 欧美二区不卡| 亚洲第一福利在线观看| 亚洲国产成人久久综合一区| 亚洲电影免费观看高清完整版在线| 欧美国产在线观看| 亚洲国产天堂网精品网站| 亚洲激情六月丁香| 亚洲免费精品| 亚洲综合欧美| 久久精品最新地址| 久久这里有精品15一区二区三区| 鲁大师影院一区二区三区| 美女国产精品| 欧美精品一卡二卡| 国产精品免费视频观看| 国产一区二区成人久久免费影院| 伊人成人开心激情综合网| 亚洲激情视频网站| 99riav久久精品riav| 亚洲一线二线三线久久久| 久久成人精品| 免费在线欧美黄色| 亚洲人成网站影音先锋播放| 夜夜嗨av一区二区三区中文字幕 | 激情文学一区| 亚洲欧洲精品一区二区三区不卡 | 亚洲精品三级| 亚洲一区二区三区午夜| 久久精品视频在线免费观看| 久久久久在线观看| 亚洲激情国产精品| 亚洲欧美国产视频| 米奇777在线欧美播放| 欧美色另类天堂2015| 国产日产欧美a一级在线| 亚洲国产精品123| 亚洲永久精品国产| 麻豆成人在线| 一区二区三区欧美| 久久久久久久久久久久久9999| 欧美www在线| 国产伦精品免费视频 | 亚洲一区二区三区在线观看视频| 久久国产一二区| 欧美日韩久久精品| 狠狠爱综合网| 亚洲综合成人在线| 欧美不卡视频一区发布| 亚洲视频在线播放| 久久这里有精品15一区二区三区| 国产精品久久久久久久浪潮网站 | 国产精自产拍久久久久久| 91久久黄色| 久久精品天堂| 中文亚洲欧美| 欧美久久久久| 在线观看91精品国产入口| 亚洲一区在线免费| 亚洲高清不卡av| 久久不射中文字幕| 国产精品日韩欧美一区二区三区| 亚洲人成人一区二区三区| 久久久www成人免费无遮挡大片| 亚洲精品美女| 欧美不卡在线| 18成人免费观看视频| 欧美一区免费| 宅男精品导航| 欧美日韩福利视频| 91久久久久久久久久久久久| 欧美一区二区私人影院日本| 野花国产精品入口| 欧美另类人妖| 亚洲国产精品一区在线观看不卡| 欧美在线观看一区| 在线一区日本视频| 欧美日韩综合在线| 99视频国产精品免费观看| 欧美激情按摩在线| 久久久久久久高潮| 国语自产偷拍精品视频偷| 欧美一区免费| 亚洲欧美精品一区| 国产精品午夜国产小视频| 亚洲一区二区三区午夜| 亚洲六月丁香色婷婷综合久久| 欧美成人福利视频| 亚洲国产欧美一区二区三区丁香婷| 久久久亚洲人| 久久黄色级2电影| 国产亚洲欧洲997久久综合| 欧美一区二区三区在线观看视频| 亚洲视频国产视频| 国产精品丝袜久久久久久app| 亚洲一区999| 亚洲视频在线一区| 国产精品久久久久久亚洲毛片| 亚洲一区二区欧美| 亚洲天堂av图片| 国产精品毛片大码女人| 午夜精品在线观看| 午夜在线一区二区| 极品少妇一区二区| 欧美不卡视频一区| 欧美高清在线观看| 亚洲视频每日更新| 亚洲一区二区三| 国产一区二区av| 欧美www在线| 欧美激情1区2区3区| 亚洲视频综合在线| 亚洲欧美日本伦理| 怡红院精品视频在线观看极品| 欧美激情中文不卡| 欧美精品亚洲二区| 亚洲桃花岛网站| 午夜精品电影| 在线观看中文字幕不卡| 亚洲国产成人av| 国产精品国产三级国产aⅴ浪潮| 欧美一区二区三区在线视频 | 国产精品尤物| 老鸭窝毛片一区二区三区| 免费观看30秒视频久久| 一本大道久久a久久精二百| 亚洲资源av| 亚洲国产高清一区| 亚洲精品中文在线| 国产精品羞羞答答xxdd| 免费人成精品欧美精品| 欧美日韩黄视频| 久久久久久久激情视频| 欧美电影免费观看大全| 午夜精品国产更新| 久久人人精品| 夜色激情一区二区| 欧美在线免费视屏| 9l视频自拍蝌蚪9l视频成人 | 欧美日韩在线第一页| 久久久精品网| 欧美日韩激情网| 久久天堂国产精品| 欧美日韩在线播放三区四区| 久久久五月婷婷| 欧美日韩在线大尺度| 另类亚洲自拍| 国产精品国产自产拍高清av王其| 久久综合福利| 国产精品久久一区主播| 亚洲国产精品成人精品| 国产日韩欧美视频| 亚洲美女av电影| 亚洲国产成人高清精品| 亚洲一区三区电影在线观看| 亚洲精品美女91| 久久精品中文字幕一区二区三区| 亚洲一区二区三区免费视频| 久久久福利视频| 欧美一区二区三区啪啪| 欧美另类一区| 欧美高清日韩| 国产最新精品精品你懂的| 一本大道久久a久久精品综合| 亚洲电影中文字幕| 欧美制服丝袜第一页| 亚洲综合丁香| 欧美日本精品| 亚洲国语精品自产拍在线观看|