У меня есть класс Objective C с методом типа C. Мне нужно связать библиотеку C++ и библиотеку C с моим кодом. Если я делаю вызовы библиотеки из любой функции Objective C, я получаю ошибки компоновщика, что он не может найти символы.
см. использование статической библиотеки c++ в задаче c
Но мне нужно как-то вызвать эту функцию C. Есть ли альтернатива? В случае только библиотек C я мог бы вызывать библиотеки из объективного метода C, но библиотека 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", чтобы избежать искажения имени.