В этом эпизоде «давайте будем глупы» у нас возникает следующая проблема: библиотека C ++ была обернута слоем кода, который экспортирует свою функциональность таким образом, чтобы ее можно было вызывать из C. Это приводит к отдельная библиотека, которая должна быть связана (вместе с исходной библиотекой C ++ и некоторыми объектными файлами, специфичными для этой программы) в программе на C для получения желаемого результата.
Сложность в том, что это делается в контексте жесткой системы сборки, которая была собрана внутри компании и состоит из буквально десятков включаемых make-файлов. Эта система имеет отдельный шаг для связывания библиотек и объектных файлов в конечный исполняемый файл, но она настаивает на использовании gcc для этого шага вместо g ++, потому что все исходные файлы программы имеют расширение .c, поэтому в результате получается множество неопределенных символы. Если командная строка вставляется вручную в командной строке и вместо gcc подставляется g ++, то все работает нормально.
Существует хорошо известная (для этой системы сборки) переменная make, которая позволяет передавать флаги на шаг компоновки, и было бы неплохо, если бы к этой переменной было добавлено заклинание, которое заставило бы gcc вести себя как g ++ (так как обе программы являются драйверами).
Я провел качественное время с документацией gcc, ища что-то, что могло бы сделать это, но не нашел ничего, что выглядит правильно, у кого-нибудь есть предложения?