C++ クラスがあり、C コードにインクルードしたいので、ラッパーを作成しました。
#ifndef __PMPC_CMPC__
#define __PMPC_CMPC__
#ifdef __cplusplus
extern "C"
#endif
void init_motor();
#ifdef __cplusplus
extern "C"
#endif
double* calc_cont_sig(double * );
#endif
これは簡単なテストです
#include "cmpc_ekf.h"
#include <stdio.h>
int main(int argc, char* argv[]) {
init_motor();
}
スタティック ライブラリを使用して C++ コードをインクルードしようとしたので、これが Makefile です。
all : main.o libcmpc_ekf.a
gcc $(EFLAGS) $(CFLAGS) -static -o main.out main.o -L. -lcmpc_ekf
main.o: libcmpc_ekf.a
gcc $(EFLAGS) $(CFLAGS) -static -c main.c -L. -lcmpc_ekf
libcmpc_ekf.a: cmpc_ekf.o
ar rcs libcmpc_ekf.a cmpc_ekf.o
cmpc_ekf.o:
g++ $(EFLAGS) $(CPPFLAGS) -c cmpc_ekf.cpp
clean:
rm *.o main.out
しかし、次のエラーが表示されます (これはエラー コードからのトークンにすぎません)。
cmpc_ekf.cpp:(.text+0x40): undefined reference to `std::cout'
cmpc_ekf.cpp:(.text+0x45): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
g++
バイナリファイルの作成に使用している場合、すべてが機能しています。g++
バイナリを使用せずに、または-lstdc++
バイナリを作成しているときに、C++ クラスまたはライブラリを C コードに含めるにはどうすればよいですか?