Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Вызов функции C с использованием экземпляра класса Objective C

Автор вопроса: neerajОтветов: 2

У меня есть класс Objective C с методом типа C. Мне нужно связать библиотеку C++ и библиотеку C с моим кодом. Если я делаю вызовы библиотеки из любой функции Objective C, я получаю ошибки компоновщика, что он не может найти символы.

см. использование статической библиотеки c++ в задаче c

Но мне нужно как-то вызвать эту функцию C. Есть ли альтернатива? В случае только библиотек C я мог бы вызывать библиотеки из объективного метода C, но библиотека C++ не позволяет мне это делать. Я не знаю почему.

  • Итак, функцию, которую вы пытаетесь вызвать, C или C++? 10.10.2012
  • Судя по другому вопросу, вы пытаетесь вызвать экспортированный интерфейс extern "C" функций C++ из программы Objective C. Это создаст головную боль для системы. Jonathan Leffler 10.10.2012
  • @JonathanLeffler Почему? Если функция объявлена ​​как extern "C", то проблем с искажением имени не возникает... А поскольку Objective-C является строгим надмножеством C, вызов функции C из Objective-C не должен быть проблемой... 10.10.2012
  • Я пытаюсь вызвать функцию в библиотеке С++, которая, в свою очередь, внутренне пытается вызвать другую функцию в библиотеке С. Для вызова функции библиотеки С++ я должен написать все такие вызовы функций в функции C-стиля в Objective-C. Я попытался предварить объявление метода С++ (в файлах заголовков) с помощью extern C, компилятор показывает ошибку. neeraj 10.10.2012

cc++static-librariesobjective-c

Ответы

Ответ 1 · рейтинг 2 · Jonathan Leffler

По моему опыту, если программа использует какие-либо классы C++, вы должны выполнять компоновку с помощью компилятора C++, чтобы связать правильные библиотеки C++. Только с C и C++ это довольно просто.

Добавьте сюда Objective C, и вы можете столкнуться с некоторыми трудностями - ваш вопрос подразумевает, что вы сталкиваетесь с некоторыми трудностями. Я не пробовал это, но...

Вы должны быть уверены, что связаны правильные библиотеки C++, правильные библиотеки Objective C, а также любые случайные библиотеки C, которые вам нужны. Если вы можете определить библиотеки, которые компонуются при сборке программы на Objective C, вы можете быть достаточно безопасным, просто компонуя компилятор C++ и перечисляя библиотеки Objective C и чистого C, которые вам нужны. Скрестим пальцы, вот и все. Если существуют сложные требования к установке для Objective C (а также сложные требования для C++), то у вас все равно могут возникнуть трудности. Хотя в целом у вас, скорее всего, все в порядке.

Если кто-то с определенным опытом говорит что-то другое, используйте его решение (если оно работает для вас). Но лучшее, что я могу предложить, это "связать программу с компилятором C++".

Ответ 2 · рейтинг 1 · simonc

Я не совсем уверен, какой код вызывает у вас проблемы, но если вы хотите вызвать функцию в стиле C, которая определена в файле C++, из другого файла C, обязательно пометьте функцию как extern "C", чтобы избежать искажения имени.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы