Xcode c / c ++ неопределенные символы - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть файл .cpp, который я объявляю функцией

#ifndef MyFile_hpp
#define MyFile_hpp

#ifdef __cplusplus
extern "C" {
#endif

void runCode();

#ifdef __cplusplus
}
#endif

#endif 

Это отлично работает. Я могу вызвать эту функцию в моем объекте. В моей реализации у меня есть внешняя пустота, которая не позволит мне позвонить. Это дает неопределенные символы. Мне нужно это собрать как есть, extern будет объявлен в другом файле при компиляции. Имея extern, должен ли этот компилятор доверять мне и позволять мне строить?

#include "MyFile.h"

extern int runMe();

#ifdef __cplusplus
extern "C" {
#endif

void runCode() {
   runMe();
}

#ifdef __cplusplus
}
 #endif

1 Ответ

0 голосов
/ 27 апреля 2018

Я думаю, что вы делаете, вероятно, правильно.

Компилятор не просто доверяет вам . Функция C ++ объявляется компоновщику с использованием дополнительных символов или «украшений», которые определяют полную информацию о классе, членом которого он является, и все его аргументы. Функция C не имеет ничего из этого, только необработанное имя, поэтому компоновщику легко заметить разницу.

...