Вызов функции C из функции в файле .mm - PullRequest
2 голосов
/ 13 февраля 2011

Это одна из тех проблем, которая немного расплывчата и поэтому трудно определить причину. Я постараюсь сделать это простым.

Я создал класс C с таким заголовком:

C_Class.h

void do_something(void);

C_Class.c

void do_something(void)
{
}

Затем у меня есть файл .mm, который работал отлично, пока в одну из его функций я не добавил свою подпрограмму C, которую я создал ранее:

  #import "C_Class.h" // included in the .h file 


 // then in the .mm file

 - (void)working_function{
  .... some working code ......
  do_something();

  }

Проблема в том, что я получаю эту ошибку:

 -[MyDotMMfile working_function] in MyDotMMfile.o
 Symbol(s) not found
 Collect2:ld returned 1 exit status

На этот вопрос ответили в другом месте, но ответ, похоже, не имеет отношения к моей ситуации. Я работаю в XCode и прекратил работу моего приложения, перестроил его и все еще получаю ту же ошибку. Поскольку я новичок в программировании, у меня есть ощущение, что это связано с тем, как я вызываю свои функции Си.

Любая помощь?


РЕДАКТИРОВАТЬ 1

Если кто-то чувствует себя таким альтруистичным, он может скачать собственно файлы здесь .

Ответы [ 2 ]

7 голосов
/ 13 февраля 2011

Файл .mm пытается вызвать искаженную версию имени функции. Вам нужно либо __BEGIN_DECLS и __END_DECLS вокруг объявлений функций C, видимых в скомпилированном C ++ файле, либо вы должны сделать эквивалент самостоятельно. Идея состоит в том, чтобы пометить эти объявления функций как extern "C", когда они видятся компилятором (Obj-) C ++, но не когда они видятся любым другим видом компилятора.

0 голосов
/ 13 февраля 2011

Каким-то образом мне удалось выяснить проблему. Это было связано с отсутствующим файлом. Решение, которое я использовал Я нашел здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...