为DPDK eal动态库添加新函数 ld不过的问题

最近对DPDK生成库做了一个封装,需要对log函数rte_log做一些修改,为了避免对原来的函数产生影响,因此在同文件下将该函数重新拷贝了一份,改名为rte_test_log(),在这个函数中修改。同时在h文件中添加了该函数的定义。

但在使用时,程序提示找不到该函数。

nm 有这个函数,但就是ld不过,奇怪啊

经过一番分析与资料查找,发现DPDK的编译利用了ld的--version-script编译选项,

该选项的作用就是指定一个文件,将动态库中需要导出的函数写入动态库中,

而其他未写入的函数只能内部可见,外部无法调用。

例如在rte_eal_version.map文件中定义了:

DPDK_2.0 {

global:

__rte_panic;

devargs_list;

... ...

rte_log;

... ...

local: *;

};

因此,如果要在外部使用新定义的xxx_eal_init()函数,还需要修改该文件,添加这个函数:

DPDK_2.0 {

global:

__rte_panic;

devargs_list;

... ...

rte_log;

rte_test_log;

... ...

local: *;

};

重新编译DPDK,会发现外部已经可以调用该函数了:

关于ld的--version-script编译选项,网上已经有很多资料,这里不再复述。

但这个需要手动加,多的时候怎么办了??

猜你喜欢

转载自blog.csdn.net/armlinuxww/article/details/90207137