Переопределить функцию C, определенную в статической библиотеке

У меня есть статическая библиотека файлов C, скомпилированная с помощью g ++ на Cygwin. Я хочу провести модульное тестирование одной функции, которая определена в библиотеке. Эта функция вызывает другую функцию, определенную в этой библиотеке, и я хочу переопределить зависимость, чтобы заменить ее моей собственной версией этой функции. Я не могу изменить содержимое статической библиотеки, поэтому это решение [ Переопределить вызов функции в C ] не применяется.

Обычно я могу написать файл .cpp и включить файл .c, содержащий функцию, которую я хочу протестировать, что существенно расширяет этот файл с помощью кода, который я добавляю. Это грязный трюк, который я никогда не использовал бы для производственного кода, но он удобен для модульного тестирования файлов C, поскольку дает моему тестовому коду доступ к статическим объектам в этом файле C. Затем я могу написать свою фальшивую версию зависимости и функцию модульного тестирования, которая вызывает функцию, которую я тестирую. Я компилирую my.cpp, чтобы получить my.o, а затем связываю его со статической библиотекой. Теоретически, поскольку компоновщик уже нашел определение зависимости (то, которое я предоставил), он не будет искать в библиотеке, и конфликта не будет. Обычно это работает, но теперь я получаю сообщение об ошибке «множественное определение», когда компоновщик сначала находит мою подделку, а затем находит настоящую. Я не знаю, что может вызвать это, и не знаю, что искать. Я также не могу свести это к простому примеру, потому что в моих простых примерах такой проблемы нет.

Пожалуйста, идеи?

7
задан Community 23 May 2017 в 10:34
поделиться