在 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
问题已解决,问题出在全局变量声明不正确。
我正在尝试使用以下文件结构在 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
问题已解决,问题出在全局变量声明不正确。