次のように C コードをコンパイルします。
gcc -c -o somecode.o somecode.c
次に、次のような C++ コード:
g++ -c -o othercode.o othercode.cpp
次に、C++ リンカーを使用してそれらをリンクします。
g++ -o yourprogram somecode.o othercode.o
また、C 関数の宣言をインクルードするときに、C ヘッダーが来ることを C++ コンパイラに伝える必要があります。だから 07
で始まる:
extern "C" {
#include "somecode.h"
}
14
次のようなものが含まれている必要があります:
#ifndef SOMECODE_H_
#define SOMECODE_H_
void foo();
#endif
(この例では gcc を使用しましたが、原則はどのコンパイラでも同じです。C と C++ としてそれぞれ別々にビルドし、それをリンクします。)
他の回答とコメントから少しずつ集めて、C と C++ のコードを明確に分離した例を示します。
C パート:
foo.h :
#ifndef FOO_H
#define FOO_H
void foo(void);
#endif
foo.c
#include "foo.h"
void foo(void)
{
/* ... */
}
これを 29
でコンパイルします .
C++ の部分:
bar.cpp
extern "C" {
#include "foo.h" //a C header, so wrap it in extern "C"
}
void bar() {
foo();
}
これを 34
でコンパイルします
そして、すべてをリンクします:
g++ -o myfoobar foo.o bar.o
理由: C コードは、46
ではなく、プレーンな C コードである必要があります。 s は「いつか別の言語からこれを呼び出すかもしれない」という意味です。 C++ プログラマーがあなたの C 関数を呼び出す場合、それは彼らの あなたの問題ではなく、それを行う方法の問題。また、C++ プログラマーの場合、C ヘッダーは自分のものではない可能性があり、変更すべきではありません。 ) は C++ コードに属します。
もちろん、C ヘッダーを 65
にラップする以外は何もしない便利な C++ ヘッダーを自分で作成することもできます。
/var/run/renderd/renderd.sock のソケット バインドが失敗したというエラーが表示されます。通常のユーザーの場合、それ以外の場合はすべて正常に動作しますか?
共有ライブラリの読み込み中にエラーが発生しました:libncurses.so.5: