共享库(Shared Library) 是一种可被多个程序同时使用的库文件,它允许程序在运行时动态链接到库中的函数和数据。在Linux系统中,共享库通常以 .so
(Shared Object)为扩展名。
.a
结尾。.so
结尾。假设我们有一个简单的汇编函数 add
:
; add.asm
section .text
global add
add:
mov eax, [esp+4]
add eax, [esp+8]
ret
nasm -f elf64 add.asm -o add.o
使用 gcc
将对象文件打包成共享库:
gcc -shared -o libadd.so add.o
编写一个C程序调用 add
函数:
// main.c
#include <stdio.h>
extern int add(int a, int b);
int main() {
int result = add(3, 5);
printf("Result: %d\n", result);
return 0;
}
编译并链接C程序与共享库:
gcc -o main main.c -L. -ladd
运行程序时,需要确保系统能找到 libadd.so
。可以通过设置 LD_LIBRARY_PATH
环境变量来实现:
export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH
./main
原因:系统无法定位共享库文件。
解决方法:
LD_LIBRARY_PATH
环境变量。/usr/lib
或 /usr/local/lib
)。ldconfig
更新缓存。原因:不同版本的共享库被同时加载。
解决方法:
原因:动态链接可能引入额外的开销。
解决方法:
通过以上步骤和方法,可以有效地在Linux环境下使用NASM创建和使用共享库。
领取专属 10元无门槛券
手把手带您无忧上云