Связывание нескольких объектных файлов C, содержащих функции с эквивалентной сигнатурой.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Связывание нескольких объектных файлов C, содержащих функции с эквивалентной сигнатурой.

Сообщение Anonymous »

Предположим, у меня есть программа на C++, и я хочу вызывать в ней функции из объектного файла C. Ограничение состоит в том, что мне не разрешено вносить какие-либо изменения в исходные файлы C.

В этом случае я бы включил заголовок C как extern "C " в моем файле C++ вызовите функцию, скомпилируйте объект C с помощью gcc -c и передайте результат в g++ вместе с фактическими исходными кодами C++.

Думаю, я бы также поместил C-заголовок #include внутри именованного блока namespace в файле C++, чтобы сохранить чистоту локального пространства имен (кто знает, какие еще интересные вещи есть в файле .h).

Что теперь, если мне нужно вызвать функции из двух объектных файлов C? Допустим, у них разные подписи. Но в объектных файлах также есть дублирующиеся функции. Не взорвется ли мой компоновщик на этом этапе, если я попытаюсь передать оба объекта в g++ одновременно? То же самое и с глобальными переменными.

Еще раз: мне не разрешено изменять ЛЮБОЙ исходный код C. В противном случае я бы просто переименовал файлы .c в .cxx, обернул их содержимое и содержимое соответствующих заголовков внутри namespace bla { и передал все в g++.

(Да, C не является подмножеством C++, как уже упоминалось в одном из комментариев)

Подробнее здесь: https://stackoverflow.com/questions/343 ... nt-signatu
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»