链接共享库时出现问题

时间:2012-05-31 09:21:16

标签: c makefile shared-libraries

以下是使用共享库生成可执行文件的步骤。

  1. 我有三个文件:

    文件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.
    
  4. 然而,在最后一步,有一个错误:找不到-lhello。那么,我哪里错了?

    感谢。

1 个答案:

答案 0 :(得分:0)

链接新程序时,

gcc会查找libhello.so。在搜索已链接程序的动态依赖关系时使用libhello.so.0

换句话说:gcc -o main main.o -lhello -L.查找libhello.so./main查找libhello.so.0。这允许为遗留程序提供多个版本的库,同时精确识别与已安装的头匹配的库。

符号链接libhello.so - &gt; libhello.so.0.0.0应该做到这一点。