• <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)  編輯 收藏 引用

            伊人久久大香线蕉综合5g| 99久久伊人精品综合观看| 久久天天躁狠狠躁夜夜2020老熟妇 | 国产精品VIDEOSSEX久久发布| 国产精品无码久久四虎| 久久一区二区免费播放| 久久午夜伦鲁片免费无码| 国产成人香蕉久久久久| 久久久久av无码免费网| 狠色狠色狠狠色综合久久| 久久久久久毛片免费看| 国产成年无码久久久久毛片| 欧美日韩成人精品久久久免费看| 狼狼综合久久久久综合网| 亚洲嫩草影院久久精品| 精品久久人人爽天天玩人人妻| 色88久久久久高潮综合影院| 亚洲国产精品成人久久蜜臀| 国产成人无码久久久精品一| 久久天天躁狠狠躁夜夜av浪潮| 久久99国产精品久久99| 欧洲精品久久久av无码电影| 一级A毛片免费观看久久精品| 久久久久国产精品| 久久久久人妻一区精品色| 久久久这里只有精品加勒比| 99久久国产综合精品五月天喷水| 色狠狠久久AV五月综合| 亚洲精品乱码久久久久久| 久久一本综合| 国产成人久久777777| 精品久久久久久综合日本| 久久人人爽爽爽人久久久| 国色天香久久久久久久小说| 久久这里的只有是精品23| 996久久国产精品线观看| 精品久久久久久无码不卡| 欧美久久久久久午夜精品| 99久久国产热无码精品免费久久久久 | 久久99精品国产麻豆蜜芽| 久久精品成人免费网站|