是否可以创建一个共享库,其中存在一些未实现的功能?
我想创建一个共享库 testDele.so 并将 testDele.so 中的一些功能留给其他人使用,例如:
- 库提供者制作文件:
====== testDele.c ===============
#include <stdlib.h>
#include "testDele.h"
const DELE * DELE_Init( void * udata)
{
DELE * hnd = (DELE *) malloc(sizeof(DELE));
hnd->udata = udata;
hnd->fun = &priFun;
return hnd;
}
========== testDele.h ===============
extern int priFun(int a);
typedef int (*DELE_FUN)(int a);
typedef struct _dele
{
void * udata;
DELE_FUN fun;
} DELE ;
const DELE * DELE_Init( void * udata);
- USER-B 实现文件
====== testDeleImp.c ===============
#inlucde "testDele.h"
#include <stdio.h>
int priFun(int a)
{
printf("testDele priFun:a=%d\n",a);
return 1;
}
====== testDeleMain.c ==============
#include "testDele.h"
int main()
{
DELE * dele = DELE_Init(NULL);
dele->fun(20);
free (dele);
return 1;
}
然后当我(共享库提供者)编译共享库时
% gcc -shared -o libtestDele.so -fPIC testDele.c
发生以下错误
=================================================
Undefined symbols:
"_priFun", referenced from:
_priFun$non_lazy_ptr in cceJPWAA.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
我知道这个错误是由未实现的函数 priFunc 引起的。但是 gcc 是否有任何参数可以防止链接未定义的符号?