用于说明问题的代码示例: 文件liba.c:
int ajob (void)
{
return 19;
}
编译:
gcc -Wall -c liba.c
ar rcs liba.a liba.o
文件so.h:
int ajob (void);
int sojob (void);
file libso.c
#include "so.h"
int sojob (void)
{
return 4;
}
#if defined(WILLWORK)
void afoo(void)
{
ajob();
}
#endif
编译:
gcc -shared -L ./ -o libso.so -la -fPIC libso.c
这将不包括共享库中的ajob函数。但这会:
gcc -shared -L ./ -o libso.so -la -fPIC libso.c -DWILLWORK
文件来测试这个(appl.c):
#include <stdio.h>
#include "so.h"
int main(void)
{
printf ("so + a = %d \n", sojob() + ajob());
return 0;
}
编译:
gcc -Wall -lso appl.c -L ./ -R ./
我的问题是,是否有更优选的方法在共享库中包含静态库,避免使用“afoo”这样的虚拟函数?