当前目录下总共有7个源文件:slib.h、slib1.c、slib2.c、main.c、dlib.h、dlib1.c、dlib2.c,其中slib.h是静态库公共头文件,slib1.c将编译成静态库libslib1.a,slib2.c将编译成静态库libslib2.a,dlib.h是共享库(即通常说的动态库)公共头文件,dlib1.c将编译成共享库libdlib1.so,dlib2.c将编译成共享库libdlib2.so,main.c是主程序,链接libslib1.a、libslib1.a、libdlib1.so、libdlib2.so。
slib.h、slib1.c、slib2.c 这三个文件不变,与 linux 静态库的编译和连接过程遇到的问题 一样。
dlib.h、dlib1.c、dlib2.c、main.c 的源码:
// dlib.h
#include <stdio.h>
int dlib_add(int a, int b);
void dlib_print(const char *str);
int dlib_sub(int a, int b);
void dlib_print2(const char *str);
// dlib1.c
#include "dlib.h"
int dlib_add(int a, int b)
{
return a + b;
}
void dlib_print(const char *str)
{
if(str)
printf("file:%s, fun:%s, line:%d, str:%s\n", __FILE__, __FUNCTION__, __LINE__, str);
else
printf("file:%s, fun:%s, line:%d, str is NULL\n", __FILE__, __FUNCTION__, __LINE__);
}
// dlib2.c
#include "dlib.h"
int dlib_sub(int a, int b)
{
return a - b;
}
void dlib_print2(const char *str)
{
if(str)
printf("file:%s, fun:%s, line:%d, str:%s\n", __FILE__, __FUNCTION__, __LINE__, str);
else
printf("file:%s, fun:%s, line:%d, str is NULL\n", __FILE__, __FUNCTION__, __LINE__);
}
// main.c
#include "slib.h"
#include "dlib.h"
int main(int agrc, char **agrv)
{
printf("*.a .....\n");
printf("add:%d, sub:%d\n", add(1, 2), sub(3, 4));
print("Hello world!");
print2("Hi, world!");