C++ У меня есть статическую библиотеку функций, написанных на языке C. Допустим, файл заголовка называется myHeader.h и выглядит следующим образом:Referencing C функции в статической библиотеки из
#ifndef MYHEADER_H
#define MYHEADER_H
void function1();
void function2();
#endif
function1 и function2 не что-нибудь слишком особенный. Допустим, они существуют в файл под названием impl1.c, который выглядит как:
#include "myHeader.h"
void function1() {
// code
}
void function2() {
// more code
}
Всего код, указанный до сих пор компилируется в некоторую статическую библиотеку под названием libMyLib.a. Я бы предпочел не изменять какой-либо код, используемый для создания этой библиотеки. У меня также есть заголовок C++ (cppHeader.h), который выглядит следующим образом:
#ifndef CPPHEADER_H
#define CPPHEADER_H
class CppClass {
private:
double attr1;
public:
void function3();
};
#endif
Тогда cppHeader.cpp выглядит следующим образом:
#include "cppHeader.h"
#include "myHeader.h"
// constructor
CppClass::CppClass(){}
void CppClass::function3() {
function1();
}
Когда я пытаюсь скомпилировать это, я получаю ошибку о неопределенной ссылка на функцию1(). Я считаю, что при компиляции я все правильно связал. Я довольно ржавый на своем C++. Я уверен, что я просто делаю что-то глупое. Надеюсь, что мой простой примерный код достаточно хорошо иллюстрирует проблему.
Заранее благодарим за любую помощь!
Нельзя сказать ничего о 'C++', но в 'C' вы можете сделать свои объявления функций правильными прототипами ... просто укажите' void' для параметров: 'void fun ction1 (void); ' – pmg
@pmg - Я думал, что это не было« необходимо »с 1989 года! – Flexo
http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html – Flexo