[英]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
但是,它返回错误的未定义引用“ 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
解决了该问题,问题在于使用了错误声明的全局变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.