ELF(Executable and Linkable Format)是Linux系统下可执行文件和共享库的标准格式。.so
文件是ELF格式的共享对象(Shared Object)文件,类似于Windows下的DLL(Dynamic Link Library)文件。
LD_LIBRARY_PATH
环境变量中,或者在/etc/ld.so.conf
文件中配置,并运行ldconfig
更新缓存。ldd
命令查看程序依赖的库版本。假设有一个简单的C程序main.c
,它依赖于一个共享库libexample.so
。
main.c
#include <stdio.h>
#include "example.h"
int main() {
printf("Calling function from shared library...\n");
example_function();
return 0;
}
example.h
#ifndef EXAMPLE_H
#define EXAMPLE_H
void example_function();
#endif
example.c
#include <stdio.h>
#include "example.h"
void example_function() {
printf("Hello from shared library!\n");
}
编译共享库:
gcc -fPIC -shared -o libexample.so example.c
编译主程序并链接共享库:
gcc -o main main.c -L. -lexample
运行程序前,设置LD_LIBRARY_PATH
环境变量:
export LD_LIBRARY_PATH=.
./main
这样,程序就能正确调用共享库中的函数了。
领取专属 10元无门槛券
手把手带您无忧上云