解释这两个步骤,用于make共享库

时间:2011-11-04 05:06:59

标签: c linux shared-libraries

我做了这些步骤并创建了共享库。 但在这里我有一些问题

  1. 我想知道为什么要写4步和5步。

    我只知道这些步骤用于链接库

  2. 第六步为什么我们只使用lhuffman insted libhuffman

  3. 步骤进行:

    1 gcc -c -fPIC filebits.c -o filebits.o
    2 gcc -shared -Wl,-soname,libhuff.so.1 -o libhuffman.so.1.0.1 filebits.o
    3 mv libhuffman.so.1.0.1 /home/mydesktop/slib/
    4 ln -sf /home/mydesktop/slib/libhuffman.so.1.0.1  /home/mydesktop/slib/libhuffman.so
    5 ln -sf /home/mydesktop/slib/libhuffman.so.1.0.1  /home/mydesktop/slib/libhuffman.so.1
    6 gcc -o app app.c -lhuffman
    7 ./app
    

    请向我解释这些步骤

2 个答案:

答案 0 :(得分:3)

构建库时,链接器选项错误:

-Wl,-soname,libhuff.so.1

应该是

-Wl,-soname,libhuffman.so.1

来自fine manual

  

-soname = 名称
  [...]运行可执行文件时,动态链接器将尝试加载由DT_SONAME字段指定的共享对象,而不是使用为链接器指定的文件名。

答案 1 :(得分:1)

 1. i want know why we write 4 and 5 steps.

在步骤4中,您将创建一个指向库名称的软链接,链接器将查找该链接以进行链接 在步骤5中,您将创建指向库的软链接,指示其主要版本。您无需按照这些步骤进行操作,而是可以在第一步中生成libhuffman.so作为链接器查找的输出。但是遵循这个惯例,以便图书馆的主要&轻微跟踪次要版本。通常,库的名称为library_name.MAJOR_VERSION.MINOR_VERSIONlibrary_name.MAJOR_VERSION&的形式有软链接。只有library_name的另一个软链接。 library_name的形式为 lib [library_name]。 so ,因为这是链接器在使用-l选项时所期望的格式。您可以在Linux PC上检查库,在很多情况下您会看到遵循此约定。这个link提供了一些有关此问题的详细信息。

2.in 6th step why we use only lhuffman insted of libhuffman

GCC linker adds lib & .a (or .so) to the library name which is specified with -l option.
希望这有帮助!