Problems when linking shared library

Refresh

November 2018

Views

513 time

2

Below are the steps of how I generate the executable file using shared library.

  1. I have three files:

    File libhello.c

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

    File libhello.h

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

    File main.c

    /* main.c -- demonstrate direct use of the "hello" routine */
    #include "hello.h"
    int main(void)
    {
        hello();
        return 0;
    }
    
  2. I use the commands below to generate the shared library.

    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. Finally, I add the library path to the LD_LIBRARY_PATH variable and try to create the executable file using the shared library.

    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.
    

However, at the last step, there is one error: can't find -lhello. So, where am I wrong?

Thanks.

1 answers

0

gccищу libhello.soпри связывании новой программы. libhello.so.0используется , когда ищутся динамические зависимости от уже связанной программы.

Другими словами: gcc -o main main.o -lhello -L.ищет libhello.soи ./mainищет libhello.so.0. Это позволяет иметь несколько версий библиотеки , доступной для устаревших программ , а именно идентификации библиотеки, соответствующий установленные заголовки.

Символическая ссылка libhello.so-> libhello.so.0.0.0следует сделать трюк.