• <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 閱讀(4560) 評論(0)  編輯 收藏 引用

            91精品国产9l久久久久| 久久精品成人一区二区三区| 中文字幕久久波多野结衣av| 影音先锋女人AV鲁色资源网久久 | 97久久超碰国产精品2021| 久久99国产亚洲高清观看首页 | 久久久久亚洲av无码专区 | 亚洲AV成人无码久久精品老人| 久久精品免费观看| 久久精品国产乱子伦| 久久成人国产精品二三区| 97香蕉久久夜色精品国产| 久久精品免费观看| 久久久久99精品成人片欧美| 欧美日韩精品久久久免费观看| 高清免费久久午夜精品| 久久久国产打桩机| 亚洲国产成人久久一区久久 | 久久精品国产99国产精品| 久久亚洲中文字幕精品有坂深雪| 欧美久久一级内射wwwwww.| 亚洲国产成人久久综合碰碰动漫3d | 色综合久久最新中文字幕| 久久ZYZ资源站无码中文动漫| 国产精品久久久久蜜芽| 欧美伊人久久大香线蕉综合69| 天天爽天天爽天天片a久久网| 久久天天躁狠狠躁夜夜96流白浆| 亚洲?V乱码久久精品蜜桃 | 欧美激情精品久久久久| 国产99久久精品一区二区| 久久综合给久久狠狠97色| 国产成人精品综合久久久久| 久久无码一区二区三区少妇| 三级韩国一区久久二区综合 | 久久99精品久久久久久不卡| 91精品国产综合久久四虎久久无码一级| 九九久久自然熟的香蕉图片| 精品熟女少妇a∨免费久久| 精品久久久久久国产91| 久久精品国产亚洲av日韩|