天天看點

Ubuntu系統下使用gcc生成靜态庫和動态庫1、代碼準備2、生成靜态庫3、生成動态庫4、錯誤以及解決方法

目錄

  • 1、代碼準備
  • 2、生成靜态庫
    • ①.生成目标檔案
    • ②.生成靜态庫.a 檔案
    • ③.使用.a檔案,建立可執行檔案(需保證.a檔案和.c檔案處于同一目錄下)
    • ④.執行可執行檔案
    • ⑤.執行結果
  • 3、生成動态庫
    • ①.生成目标檔案
    • ②.生成動态庫.so檔案
    • ③.建立可執行檔案
    • ④.執行可執行檔案
  • 4、錯誤以及解決方法

1、代碼準備

sub1.c

#include <stdio.h>

float x2x(int a, int b)
{
    float result = a ^ b;
    return result;
}
           

sub2.c

#include <stdio.h>

int x2y(int start, int end)
{
    int result = 0;
    for (int i = start; i <= end; i++)
    {
        result += i;
    }
    return result;
}
           

subs.h

#ifndef subs_H
#define subs_H
float x2x(int a, int b);
int x2y(int start, int end);
#endif
           

main1.c

#include <stdio.h>
#include "subs.h"

int main()
{
    float result1 = x2x(1, 2);
    int result2 = x2y(1, 10);
    printf("result1 = %.2f\n", result1);
    printf("result2 = %d\n", result2);
    return 0;
}
           

2、生成靜态庫

①.生成目标檔案

打開終端,進入程式所在目錄,輸入:

gcc -c sub1.c sub2.c
           

執行成功之後會在目錄下生成對應的.o檔案,如圖所示:

Ubuntu系統下使用gcc生成靜态庫和動态庫1、代碼準備2、生成靜态庫3、生成動态庫4、錯誤以及解決方法

②.生成靜态庫.a 檔案

接着輸入:

ar crv mylib.a sub1.o sub2.o
           

執行成功之後,終端會輸出:

Ubuntu系統下使用gcc生成靜态庫和動态庫1、代碼準備2、生成靜态庫3、生成動态庫4、錯誤以及解決方法

并在目錄下生成一個.a靜态庫檔案,如圖所示:

Ubuntu系統下使用gcc生成靜态庫和動态庫1、代碼準備2、生成靜态庫3、生成動态庫4、錯誤以及解決方法

③.使用.a檔案,建立可執行檔案(需保證.a檔案和.c檔案處于同一目錄下)

④.執行可執行檔案

./test
           

⑤.執行結果

Ubuntu系統下使用gcc生成靜态庫和動态庫1、代碼準備2、生成靜态庫3、生成動态庫4、錯誤以及解決方法

3、生成動态庫

①.生成目标檔案

②.生成動态庫.so檔案

gcc -shared *.o -o myshare.so
           

生成結果:

Ubuntu系統下使用gcc生成靜态庫和動态庫1、代碼準備2、生成靜态庫3、生成動态庫4、錯誤以及解決方法

③.建立可執行檔案

gcc -o test main1.c myshare.so
           

④.執行可執行檔案

./test
           

4、錯誤以及解決方法

當運作動态庫的可執行檔案時,可能會出現如下錯誤:

Ubuntu系統下使用gcc生成靜态庫和動态庫1、代碼準備2、生成靜态庫3、生成動态庫4、錯誤以及解決方法

由于Linux系統自身系統設定的原因,隻能在/usr/lib 和 /lib 下搜尋對應的.so檔案,是以需要将建立的.so檔案移動至對應的目錄下

sudo cp myshare.so /usr/lib
           

之後再次執行,即可運作成功了

Ubuntu系統下使用gcc生成靜态庫和動态庫1、代碼準備2、生成靜态庫3、生成動态庫4、錯誤以及解決方法

繼續閱讀