C中的共享库

dom*_*lao 2 c

我在C中创建一个共享库,但不知道源代码的正确实现是什么.

我想创建一个API,比如printHello,

int printHello( char * text );
Run Code Online (Sandbox Code Playgroud)

这个printHello函数将调用另一个函数:

在源文件libprinthello.c中,

void printHello( char * text )
{
   printHi();
   printf("%s", text);
}
Run Code Online (Sandbox Code Playgroud)

由于此printHello函数是用户或应用程序的接口:

在头文件libprinthello.h中,

extern void printHello( char * text);
Run Code Online (Sandbox Code Playgroud)

然后在printHi函数的源文件中,使用printhi.c

void printHi()
{
   printf("Hi\n");
}
Run Code Online (Sandbox Code Playgroud)

那我的问题是,因为printHello是我想在用户中公开的唯一函数,我应该在printHi函数中做什么实现?

我还应该extern printHi函数的声明吗?

In *_*ico 5

您可以使用两个单独的头文件:

libprinthello.h:

#ifndef LIBPRINTHELLO_H /* These are include guards */
#define LIBPRINTHELLO_H

void printHello(char * text); 

#endif
Run Code Online (Sandbox Code Playgroud)

libprinthi.h:

#ifndef LIBPRINTHI_H
#define LIBPRINTHI_H

void printHi();

#endif
Run Code Online (Sandbox Code Playgroud)

libprinthello.c:

#include "libprinthi.h"
#include "libprinthello.h"

void printHello(char * text)  
{  
    printHi();  
    printf("%s", text);  
}  
Run Code Online (Sandbox Code Playgroud)

libprinthi.c:

#include "libprinthi.h"

void printHi()    
{    
    printf("Hi\n");    
}    
Run Code Online (Sandbox Code Playgroud)

然后,用户代码仅包含libprinthello.h,并且您libprinthi.h远离用户,使其printHi()不可见(用户代码也将链接到共享库):

#include "libprinthello.h"

int main()
{
    printHello("Hello World!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)