2

以下は、共有ライブラリを使用して実行可能ファイルを生成する手順です。

  1. 私は3つのファイルを持っています:

    ファイル libhello.c

    /* hello.c - demonstrate library use. */
    #include <stdio.h>
    void hello(void)
    { 
        printf("Hello, library world./n");
    }
    

    ファイル libhello.h

    /* hello.h - demonstrate library use. */
    void hello(void);
    

    ファイル main.c

    /* main.c -- demonstrate direct use of the "hello" routine */
    #include "hello.h"
    int main(void)
    {
        hello();
        return 0;
    }
    
  2. 以下のコマンドを使用して、共有ライブラリを生成します。

    gcc -g -Wall -fPIC -c hello.c -o hello.o
    gcc -shared -W,soname,-libhello.so.0 -o libhello.so.0.0.0 hello.o
    
  3. 最後に、ライブラリ パスをLD_LIBRARY_PATH変数に追加し、共有ライブラリを使用して実行可能ファイルの作成を試みます。

    export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
    ln -s libhello.so.0.0.0 libhello.so.0
    gcc -g -Wall -c main.c -o main.o -I.
    gcc -o main main.o -lhello -L.
    

ただし、最後のステップでエラーが 1 つあります。-lhello が見つかりません。それで、どこが間違っているのですか?

ありがとう。

4

1 に答える 1

0

gcclibhello.so新しいプログラムをリンクするときに探します。libhello.so.0すでにリンクされているプログラムの動的依存関係を検索するときに使用されます。

言い換えるgcc -o main main.o -lhello -L.と、 を探しlibhello.so、 を./main探しlibhello.so.0ます。これにより、インストールされているヘッダーと一致するライブラリを正確に識別しながら、レガシー プログラムで使用できるライブラリの複数のバージョンを使用できます。

シンボリックリンクlibhello.so->libhello.so.0.0.0でうまくいくはずです。

于 2012-05-31T09:23:28.243 に答える