Можно ли объявить слабую функцию, передав аргумент в gcc? - PullRequest
0 голосов
/ 07 мая 2019

Мы можем объявить слабую функцию, используя __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

говорит, что это можно сделать ....

Существует два способа объявления слабого символа:

  1. Передав аргумент в GCC, сказав ему экспортировать символ этой функции в качестве слабого символа.

  2. Путем помещения атрибута ((слабый)) перед реализацией функции.

1 Ответ

0 голосов
/ 07 мая 2019

Я бы сказал, нет, такой опции нет.

Это немного похоже на XY-проблему , возможно, вам следует более четко указать, какую проблему вы пытаетесь решитьвместо того, какое решение вы хотите заставить работать.

Как пример, ваш пример не сработает, поскольку вы предоставляете два определения и не говорите , который следует считать слабым.Это должно быть

# Remember this doesn't really work!
$ gcc --weak=foo.c:foo foo.c main.c

или что-то в этом роде, т.е. вам нужно указать, в каком файле находится слабое определение.

...