【发布时间】:2019-05-07 07:38:10
【问题描述】:
我们可以通过在 C 代码文件中使用 __attribute__((weak)) 来声明弱函数。我想知道是否有一种方法可以在 gcc 编译期间声明它而不在代码文件中写入任何内容?
例如
文件:foo.h
int foo();
文件:foo.c
#include<stdio.h>
int foo(){
printf("foo called from file\n");
return 1;
}
文件:main.c
#include<stdio.h>
#include"foo.h"
int foo(){
printf("foo called from main");
return 1;
}
int main(){
foo();
return 0;
}
是否可以编译上述代码并将 foo 从命令行导出为弱?
例如gcc --weak=foo.c:foo foo.c main.c
./a.out produces foo called from main.
我知道在foo.c 中写__attribute__((weak)) 上面的foo() 声明会在main 中调用foo()。
博客:
blog.microjoe.org/2017/unit-tests-c-cmocka-coverage-cmake.html
说可以这样做....
有两种声明弱符号的方式:
通过向 GCC 传递一个参数,告诉它将此函数的符号导出为弱符号。
通过在函数实现之前放置 attribute((weak)) 注释。
【问题讨论】:
标签: c compilation linker weak-references