Мы можем объявить слабую функцию, используя __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.
Я знаю, что написание __attribute__((weak))
выше foo()
декларации в foo.c
вызовет foo()
в основном.
Блог:
blog.microjoe.org / 2017 / блок-тесты-с-cmocka-покрытие-cmake.html
говорит, что это можно сделать ....
Существует два способа объявления слабого символа:
Передав аргумент в GCC, сказав ему экспортировать символ этой функции в качестве слабого символа.
Путем помещения атрибута ((слабый)) перед реализацией функции.