说我有a.so和b.so. 我可以将c.so作为单个共享库与a和b导出的所有函数一起生成,当然可以解析所有的内部依赖关系(即a.so所调用的b.so的所有函数以及相反的方式)?
我试过了
gcc -shared -Wl,soname,c.so -o c.so a.so b.so
但它不起作用.
同样如果我将ao和bo归档为aa和ba(不应该修改ao和bo),并且这样做
gcc -shared -Wl,soname,c.so -o c.so a.a b.a
谢谢
用C实施OO状代码封装和多态的一种常见的方法是不透明的指针返回到含有一些函数指针的结构.这是一个非常频繁的模式,例如在Linux内核中.
使用函数指针,而不是函数调用引入了开销,这是由于缓存大多可以忽略不计,因为已经在其他问题进行讨论.
但是,对于GCC(> 4.6)的新-fwhole-program和-flto优化选项,情况会发生变化.
#include <stdlib.h>
#include "libPointers.h"
void do_work(struct worker *wrk, const int i)
{
wrk->datum += i;
}
struct worker *libPointers_init(const int startDatum)
{
struct worker *wrk = malloc (sizeof (struct worker));
*wrk = (struct worker) {
.do_work = do_work,
.datum = startDatum
};
return wrk;
}
Run Code Online (Sandbox Code Playgroud)
#ifndef __LIBPOINTERS_H__
#define __LIBPOINTERS_H__
struct worker {
int datum;
void (*do_work)(struct worker *, int i);
};
extern void do_work (struct worker *elab, const int i);
struct worker *libPointers_init(const int …
Run Code Online (Sandbox Code Playgroud)