Итак, у меня есть библиотечный вызов init_foo()
и функция bar()
, которая его вызывает.Они живут в library.o
вместе с некоторыми другими полезными вещами, которые нужны обоим.
Я хочу написать некоторый код, bar_init_failure.t.c
, чтобы проверить, что происходит при сбое init_foo()
, без фактической настройки сбоя.В Perl, основной части нашей кодовой базы, я бы запустил Test :: Resub и заменил бы вызов библиотеки заглушкой, которая возвращает код ошибки.Чтобы добиться чего-то похожего в C, у меня было смутное впечатление, что я могу переопределить init_foo
в исходном коде для bar_init_failure.t.c
и по-прежнему ссылаться на library.o
для остальной части кода, но gcc
и ld
жалуютсянасчет дубликатов символов (вместо того, чтобы выбирать первый), поэтому я думаю, что я ошибаюсь в чем-то (и я довольно ржавый в таких вещах, поэтому я не слишком уверен в своей стратегии).
Есть ли какой-нибудь способ умиротворить компоновщик или есть другая стратегия, которую я должен использовать?(Я бы предпочел не взламывать код library.c
, если я могу помочь.)