小编Met*_*tiu的帖子

合并多个.so共享库

说我有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 unix linux gcc shared-libraries

37
推荐指数
2
解决办法
3万
查看次数

帮助编译器优化函数指针

用C实施OO状代码封装和多态的一种常见的方法是不透明的指针返回到含有一些函数指针的结构.这是一个非常频繁的模式,例如在Linux内核中.

使用函数指针,而不是函数调用引入了开销,这是由于缓存大多可以忽略不计,因为已经在其他问题进行讨论.

但是,对于GCC(> 4.6)的新-fwhole-program和-flto优化选项,情况会发生变化.

libPointers.c

#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)

libPointers.h

#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)

c optimization gcc function-pointers linux-kernel

19
推荐指数
1
解决办法
2804
查看次数