目安時間:約
2分

C++で書いているけど、Cのソースコードを読み込みたいときがある。
しかし、普通にC++からCの関数を呼び出すと、
1 |
undefined reference to 'a()' |
というエラーになってしまう。
調べてみると、C++コンパイラは、マングル(mangle)と呼ばれる仕組みがあり、
オーバーロードの実現のためなどに、引数の型やクラス・名前空間名を使って
修飾された一意の名前を作成して、引き当てに使っているらしい。
しかしCコンパイラはマングリングしないため、
マングル前の素の名前になっている。
それで引き当てに失敗してしまうということだ。
対策としては、C++コンパイラに対して、
Cの関数であることを明示し、マングリングしないようにさせる必要がある。
そのためには、以下のようにするだけで、Cのソースコードを利用できるようになる。
1 2 3 |
extern "C"{ #include "利用したいC言語のヘッダーファイル" } |
いいね!
■参考
http://www.wagavulin.jp/entry/2017/02/09/215036
コメントフォーム