以下是使用共享库生成可执行文件的步骤。
我有三个文件:
文件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;
}
我使用以下命令生成共享库。
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
最后,我将库路径添加到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.
然而,在最后一步,有一个错误:找不到-lhello。那么,我哪里错了?
感谢。
答案 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
应该做到这一点。