在 C 中创建共享库

Creating a shared library in C

我正在尝试使用以下文件结构在 C 中创建一个共享库。

func1.h

#ifndef INCLUDE_FUNC1_H_
#define INCLUDE_FUNC1_H_

void function1();

#endif

func1.c

#include "func1.h"

void function1() {
    //do function 1
}

func2.h

#ifndef INCLUDE_FUNC2_H_
#define INCLUDE_FUNC2_H_

void function2();

#endif

func2.c

#include "func2.h"

void function2() {
    //do function 2
}

现在为了避免包含多个头文件,我想要一个通用头文件,commonheader.h,其中包含其他头文件。

#ifndef INCLUDE_COMMONHEADER_H_
#define INCLUDE_COMMONHEADER_H_

#include "func1.h"
#include "func2.h"

#endif

接下来我把它们编译成一个共享库。

gcc -c -fPIC -o func1.o func1.c
gcc -c -fPIC -o func2.o func2.c
gcc -shared -o libcommonheader.so *.o

现在我正在尝试使用创建的共享库。 test.c 看起来像这样,

#include "commonheader.h"
int main () {
    function1();
}

我试着编译它,

gcc -L. -I. -Wall -o test test.c -lcommonheader

但是它 returns 错误未定义对 `function1' 的引用。

我做错了什么?

您有一个简单的错字:您的函数被称为 function*,而不是 func*

请注意,对于 -Wall(您提到的),您应该会看到以下指示问题的警告(至少对于 gcc >= 4.8):

test.c: In function ‘main’:
test.c:3:5: warning: implicit declaration of function ‘func1’; did you mean ‘function1’? [-Wimplicit-function-declaration]
     func1();
     ^~~~~
     function1

问题已解决,问题出在全局变量声明不正确。