• <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>

            tqsheng

            go.....
            隨筆 - 366, 文章 - 18, 評論 - 101, 引用 - 0
            數據加載中……

            Linux下合并多個.a庫函數 到動態庫so

            Linux下合并多個.a庫函數 到動態庫so

            在LINUX下用靜態庫進行鏈接的時候經常會碰到如下情況:存在與靜態庫名一樣的動態庫。以MKL為例,在目錄/MKLROOT/lib/em64t下,庫libmkl_core.a和庫libmkl_core.so同名。這樣的話我們如果在鏈接時加入鏈接的庫名-lmkl_core,編譯器只同動態庫libmkl_core.so鏈接,而屏避掉靜態庫文件libmkl_core.a。所以靜態庫文件里的對象文件無法被鏈接。解決這一問題有兩個辦法:

            1. 直接將靜態庫的絕對路徑加到編譯過程中去:

            gcc -I$(INCLUDE) -L$(LIB) main.c /MKLROOT/lib/em64t/libmkl_core.a -o a.out

            這樣的話編譯器就會根據指定的文件進行編譯鏈接,不過這種做法在靜態庫文件少的時候可用,如果文件一多,就會讓整個指令冗長,可讀性差。下面是一種比較可取的方法。

            2. 在目錄/MKLROOT/lib/em64t下用vi編輯器打開一個與所有庫文件都不重名的庫,例如libmkl.a。然后在該文件中加入下面的一行:

            GROUP (libmkl_*.a libmkl_*.a libmkl_*.a ............... libmkl_*.a)

            (GROUP一定要大寫)

            保存退出。之后在編譯程序的時候只要將該文件加入鏈接項就OK了。命令如下:

            gcc -I$(INCLUDE) -L$(LIB) main.c -lmkl -o a.out

            上面的選項(-lmkl)就相當于讓編譯器gcc到文本文件libmkl.a指定的靜態庫文件中尋找.o文件進行鏈接,而不用人工地將每個靜態庫地址都輸進行。查找.o對象文件的順序從左到右,所以應該將最低層的靜態庫放到最右邊,把需要調用右邊庫里的對象的庫放到左邊,否則會出現找不到對象文件,導致報函數沒定義的錯誤。

            posted on 2013-01-04 16:54 tqsheng 閱讀(4559) 評論(0)  編輯 收藏 引用

            欧美牲交A欧牲交aⅴ久久| 丁香久久婷婷国产午夜视频| 77777亚洲午夜久久多喷| 午夜久久久久久禁播电影 | 青青青青久久精品国产| 久久青青草原亚洲av无码app| 成人久久综合网| 久久久久久久综合日本| 成人久久免费网站| 精品久久久久中文字| 亚洲∧v久久久无码精品| 精品久久久久中文字| 99久久久精品免费观看国产| 欧美亚洲另类久久综合婷婷| 久久精品国产亚洲综合色| 久久天天婷婷五月俺也去| 精品免费久久久久国产一区| 性欧美大战久久久久久久久 | 久久精品国产亚洲7777| 精品国产VA久久久久久久冰| 久久久亚洲AV波多野结衣| 久久久久国产一区二区| 国产午夜精品理论片久久影视 | 久久精品一区二区| 国产亚洲美女精品久久久2020| 91精品国产91久久久久久| 国产国产成人精品久久| 婷婷久久香蕉五月综合加勒比| 一本色综合久久| 久久精品一区二区三区中文字幕| 久久97精品久久久久久久不卡| 久久久久久亚洲精品成人| 久久精品国产乱子伦| | 久久综合九色欧美综合狠狠| 久久美女人爽女人爽| 97久久超碰成人精品网站| 久久精品中文闷骚内射| 国产精品久久久久…| 91精品国产综合久久香蕉| 91精品国产91久久|