我希望正确使用__attribute__((weak))
,进行函数重写。
我的代码没有按照预期工作。出了什么问题?
common.h
#include <stdio.h>
int __attribute__((weak)) doJob1(void);
int __attribute__((weak)) doJob2(int, int);
typedef int (*Job1)(void);
typedef int (*Job2)(int, int);
common.c
#include <stdio.h>
#include "common.h"
__attribute__((weak)) int doJob1(void)
{
printf("doJob1 common WEAK\n");
return 0;
}
__attribute__((weak)) int doJob2(int a, int b)
{
printf("doJob2 common WEAK\n");
return 0;
}
driverA.c
#include <stdio.h>
#include "common.h"
int doJob1(void)
{
printf("doJob1 driverA Strong\n");
}
void main()
{
Job1 j1 = doJob1;
Job2 j2 = doJob2;
j1();
j2(0, 0);
}
当我运行这个程序时,我看到:
sh> ./a.out
doJob1 common WEAK
doJob2 common WEAK
我原本预期的结果是这样的,但实际却是:
sh> ./a.out
doJob1 driverA Strong
doJob2 common WEAK
我如何获得预期的结果?
总体来说,有许多形式为“Job1”,“Job2”...“JobXX”的函数。 driverA想要使用自己的函数处理部分作业,并对一些作业使用通用函数,还有一些函数将为空:
ex>
Job1 - driverA_Job1
Job2 - common Job2
Job3 - NULL
..
另一位司机,比如司机B,可能会做出不同的选择:
Job1 - common job1
job2 - B's own job2
job5 - NULL
如何正确覆盖函数?
#define
。 - Lundin-Wl,-whole-archive
参数都很重要。您需要展示您如何编译代码。 - KamilCuk