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

posts - 297,  comments - 15,  trackbacks - 0
當我們的程序中有經常使用的模塊,而且這種模塊在其他程序中也會用到,這時按照軟件重用的思想,我們應該將它們生成庫,使得以后編程可以減少開發代 碼量。這里介紹兩個命令ar和nm,用來對庫操作。

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

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

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

   3、示例
  1)、創建靜態庫:
  gcc -c hello.c -o hello.o
ar rcs libhello.a hello.o

  2)、使用靜態庫:
  gcc -o test test.c -static -L. -lhello

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

4)、構建動態共享庫:
  gcc/g++下加 -fPIC -shared 參數即可
  其中 -fPIC 作用于編譯階段,告訴編譯器產生與位置無關代碼(Position-Independent Code),則產生的代碼中,沒有絕對地址,全部使用相對地址,故而代碼可以被加載器加載到內存的任意位置,都可以正確的執行。這正是共享庫所要求的,共 享庫被加載時,在內存的位置不是固定的。
  可以export LD_DEBUG=files,查看每次加載共享庫的實際地址。
  其中 -shared 作用于鏈接階段,實際傳遞給鏈接器ld,讓其添加作為共享庫所需要的額外描述信息,去除共享庫所不需的信息。
  可以分解為如 下步驟:
  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)、動態共享庫的使用:
由共享庫加載器自動加載
  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: 指定運行時搜索動態庫的路徑,可以用環境變量LD_LIBRARY_PATH指定。

  程序自己控制加載、符號解析(使 用libc6之dl庫)
  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); // 加載動態庫
if(!handle)
    {
      fprintf(stderr, "%s\n", dlerror());
exit(1);
    }

    dlerror();

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

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

    dlclose(handle);

return 0;
  }

  6)、GNU/Linux下動態庫之加載器為/lib/ld-linux.so, 可執行的。
  /lib/ld-linux.so ./cos <===> ./cos

  7)、有用的環境變 量     
  LD_LIBRARY_PATH
  指定運行時動態庫的搜索路徑
  LD_DEBUG
  調試用,其值 可為:
  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函數的共享庫名 
  nm -AD /lib/* /usr/lib/* 2>/dev/null | grep "cos$"
  nm -- 從對象文件中列出符號。

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

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

posted on 2010-05-06 22:32 chatler 閱讀(837) 評論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

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

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区二区欧美| 国产精品亚洲成人| 亚洲国产精品v| 亚洲伊人网站| 日韩视频免费观看高清完整版| 欧美日韩ab| 欧美日精品一区视频| 久久综合网hezyo| 欧美mv日韩mv亚洲| 欧美日韩国产免费观看| 欧美日韩久久精品| 国产农村妇女精品一区二区| 国产精品视频九色porn| 国产精品三区www17con| 国内精品久久久久久| 欧美成人蜜桃| 亚洲欧美综合另类中字| 久久精品欧洲| 国产日本欧美一区二区三区在线| 日韩视频永久免费| 欧美大胆人体视频| 久久午夜国产精品| 91久久国产自产拍夜夜嗨| 欧美激情精品久久久| 欧美护士18xxxxhd| 亚洲一区二区三区精品视频| 一区二区三区视频在线看| 欧美午夜一区二区| 欧美一区二区三区免费在线看| 午夜一区二区三区在线观看 | 一区二区三区成人精品| 久久av二区| 亚洲日韩欧美视频| 免费成人黄色片| 亚洲国产精品久久久久秋霞不卡| 亚洲资源在线观看| 久色婷婷小香蕉久久| 亚洲乱码国产乱码精品精可以看 | 亚洲电影第三页| 久久免费观看视频| 久久精品30| 伊人久久亚洲影院| 免费av成人在线| 亚洲午夜羞羞片| 亚洲精品国产品国语在线app | 久久精品视频va| 国产一区二区精品| 免费成人在线观看视频| 欧美成人伊人久久综合网| 伊大人香蕉综合8在线视| 亚洲国产成人精品久久久国产成人一区| 欧美日韩国产综合网| 亚洲视频在线观看一区| 99在线热播精品免费| 亚洲午夜久久久久久尤物| 国产日韩欧美日韩大片| 欧美日韩在线视频一区| 欧美不卡激情三级在线观看| 欧美黄色一级视频| 国产精品久久久久毛片大屁完整版| 欧美裸体一区二区三区| 国产日韩欧美在线观看| 亚洲国产精品久久久| 亚洲国产精品悠悠久久琪琪| 欧美精品aa| 久久久久久久一区二区三区| 欧美成人一区二区三区| 久久精品国产一区二区电影 | 欧美日韩综合视频网址| 久久久久久久一区二区三区| 久久综合伊人77777麻豆| 欧美一区二视频在线免费观看| 久久久伊人欧美| 久久久久久高潮国产精品视| 亚洲一卡久久| 欧美日韩视频专区在线播放| 久久免费视频一区| 国产精品v欧美精品∨日韩| 亚洲电影免费在线| 韩日成人av| 久久九九热re6这里有精品| 欧美制服丝袜第一页| 国产精品一区一区三区| 9色精品在线| 亚洲欧美日韩国产综合在线 | 欧美国产精品日韩| 91久久久久久久久| 欧美jizzhd精品欧美喷水| 亚洲精品1区| 午夜性色一区二区三区免费视频| 欧美日韩精品一本二本三本| av成人毛片| 久久久91精品国产| 亚洲国产精品视频| 欧美激情视频免费观看| 一二三四社区欧美黄| 欧美一区二区三区四区夜夜大片| 国产欧美日韩视频在线观看 | 久久综合电影| 久久久久久夜| 亚洲人成高清| 国产欧美一区二区色老头| 久久乐国产精品| 亚洲乱码国产乱码精品精98午夜 | 欧美一区二区三区免费观看| 久久激五月天综合精品| 在线观看成人网| 国产精品国产馆在线真实露脸 | 欧美大片免费观看在线观看网站推荐| 最近中文字幕日韩精品 | 伊人婷婷欧美激情| 国产精品亚洲一区二区三区在线| 久久久久国产精品一区二区| 日韩视频在线一区二区| 亚洲国产精品视频| 欧美99在线视频观看| 老色鬼久久亚洲一区二区| 午夜在线视频观看日韩17c| 99国产精品久久久久久久久久 | 欧美成人高清视频| 久久九九热re6这里有精品| 亚洲欧美日韩精品综合在线观看| 亚洲视频一二| 香蕉精品999视频一区二区| 亚洲系列中文字幕| 亚洲欧美日韩在线观看a三区| 午夜精品免费在线| 久久久久久穴| 亚洲国产另类久久精品| 亚洲精品乱码久久久久久| 一区二区欧美在线| 欧美一区日本一区韩国一区| 欧美在线欧美在线| 欧美精品久久久久久久| 国产精品免费aⅴ片在线观看| 国产精品亚洲综合天堂夜夜| 亚洲精品日韩综合观看成人91| 中国av一区| 免费观看成人网| 国产欧美亚洲精品| 日韩一级片网址| 免费成人你懂的| 亚洲视频免费在线| 欧美精品xxxxbbbb| 伊大人香蕉综合8在线视| 亚洲一区二区三区视频播放| 免费h精品视频在线播放| 国产精品99久久久久久久vr| 噜噜噜躁狠狠躁狠狠精品视频| 国产精品国产三级国产普通话三级| 在线成人www免费观看视频| 翔田千里一区二区| 亚洲一区中文字幕在线观看| 欧美日韩国产探花| 一本不卡影院| 99精品视频免费观看视频| 欧美激情片在线观看| 亚洲人成网站在线播| 欧美aa在线视频| 欧美久久在线| 亚洲视频中文字幕| 中文国产成人精品久久一| 欧美日本一区| 亚洲欧美日韩中文在线制服| 亚洲欧美不卡| 亚洲成色999久久网站| 亚洲国产裸拍裸体视频在线观看乱了| 久久久久久久尹人综合网亚洲| 亚洲国产精品久久久久秋霞不卡| 欧美成人网在线| 欧美丝袜一区二区| 欧美一二三区精品| 免费视频一区| 久久精品91| 欧美日韩在线播放| 久久婷婷色综合| 欧美女同视频| 亚洲第一伊人| 黄色综合网站| 亚洲尤物在线视频观看| 亚洲高清在线| 一本久久a久久精品亚洲| 国产精品成人一区二区网站软件 | 午夜日韩在线| 亚洲精品一区二区三区樱花| 亚洲精品视频一区| 欧美网站在线观看| 在线视频免费在线观看一区二区| 亚洲影视在线| 国产一区二区三区在线观看精品 | 久久成人18免费网站| 好吊色欧美一区二区三区视频| 久久一区二区三区国产精品| 亚洲经典三级| 久久久久久久网| 亚洲最新合集| 欧美国产免费| 欧美一级网站| 亚洲欧洲在线一区| 国产欧美日韩亚洲一区二区三区|