C/C++:GCC/G++ -Wl,-soname

  1. mymath.h:
#ifndef _MYMATH_H
#define _MYMATH_H

int add(int, int);
int sub(int, int);
int mul(int, int);
int div(int, int);

#endif
  1. mymath.c:
#include "mymath.h"

int add(int a, int b)
{
    return a + b;
}

int sub(int a, int b)
{
    return a - b;
}

int mul(int a, int b)
{
    return a * b;
}

int div(int a, int b)
{
    return a / b;
}
  1. main.c
#include <stdio.h>
#include <unistd.h>

#include "mymath.h"

int main()
{
    int a = 20;
    int b = 5;

    printf("add(%d, %d)=%d\n", a, b, add(a, b));
    printf("sub(%d, %d)=%d\n", a, b, sub(a, b));
    printf("mul(%d, %d)=%d\n", a, b, mul(a, b));
    printf("div(%d, %d)=%d\n", a, b, div(a, b));

    return 0;
}
  1. makefile:
SRC = mymath.c
OBJS = $(SRC:%.c=%.o)

LIB = libmymath.so
SONAME = $(LIB)
CC = gcc -std=gnu99 -fPIC
CFLAGS = -g -O2 -Wall -Wextra
LDFLAGS = -Wl,-soname,$(SONAME)
DEPLIBS =
SHARED = -shared

.c.o:
    $(CC) $(CFLAGS) -o $@ -c $<
    @echo "Compile $< to $@ OK"

all:
    @make libmymath

libmymath: $(OBJS)
    $(CC) -o $(LIB) $(SHARED) $(LDFLAGS) $(OBJS) $(DEPLIBS)

clean:
    @rm -f $(OBJS)
    @rm -f $(LIB)

.PHONY: all clean

make
gcc -o main main.c -lmymath -L.
ldd main
readelf -d libmymath.so
修改makefile中SONAME = libmymath.1.so
重新运行程序
错误查看

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值