неопределенная ссылка на функции c в коде c ++
У меня странная проблема: код ниже прекрасно скомпилирован.
src.cpp:
extern "C" {
#include "header.h"
}
void A::Execute() {
B::Instance().Reset(ix);
c_func(ix);// this is c functions declared in header.h
C::Instance().Erase(ix);
}
Но когда я закомментирую c_funk (), я получаю ошибку компоновки во всех местах, где я использую функции c из файла header.h.
С этим небольшим изменением:
void A::Execute() {
B::Instance().Reset(ix);
//c_func(ix);// this is c function declared in header.h
C::Instance().Erase(ix);
}
Я получаю: неопределенная ссылка на c_func ().
Есть идеи как это решить? Благодарю.
Обновить:
Я добавил фиктивную функцию в header.h: foo_for_linkage_problem ();
и таким образом решил проблему. Как я понимаю, компоновщик попытается сделать некоторую оптимизацию, которая решает эту проблему. новый код:
void A::Execute() {
B::Instance().Reset(ix);
foo_for_linkage_problem();// this is c empty function declared in header.h
C::Instance().Erase(ix);
}