CからC++を呼び出すには?
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGC++で書かれた関数を使うことは可能で
しょうか?
どんなやり方でもいいので、教えてください。
0002デフォルトの名無しさん
NGNGextern "C" {
/*〜C++のパブリックなインタフェース*〜/
};
0003デフォルトの名無しさん
NGNG試してみてダメだったと思うのですが・・・
もう一回やってみます。
00042
NGNG置いても駄目だからね>1
Cで認識する普通の関数形式を記述の事。
0005デフォルトの名無しさん
NGNG-lstdc++ を付加とか。
0006デフォルトの名無しさん
NGNGobj->lpVtbl->method() をつかって。
0007デフォルトの名無しさん
NGNG> extern"C"の中に thisを使うクラスメソッドなんか
関係ないツッコミだけど一般に「クラスメソッド」と言った場合、
「インスタンスメソッド」に対する言葉で、クラスメソッドとは
C++ で言えば static なメンバ関数のことをいう。
従ってクラスメソッドには this は渡されない。
00081
NGNGそうです。gccです。
明日試す予定です。
C++用のライブラリはちゃんとリンクしたと思うので、大丈夫だと思うのですが。
とりあえず結果は明日報告します。
>>6
環境が環境なので〜〜
0009デフォルトの名無しさん
NGNGそのメンバ関数をstatic宣言してしまえばよい。
当然static宣言されたメンバ関数はインスタンスで共用されるので
注意が必要。
って、質問の内容と違うかな?
0010デフォルトの名無しさん
NGNG> クラスのメンバ関数をCから呼び出したい場合、いちばん簡単なのは
> そのメンバ関数をstatic宣言してしまえばよい。
で、それをどうやって C から呼ぶのかな?
mangle って何だか知ってる?
0011デフォルトの名無しさん
NGNGソースがあるものは全部 C++ でコンパイルするのが一番簡単じゃないかな。
それならリンケージで悩む必要もないし。
ソースがない関数だけ extern "C" すればよいことだし。
00121
NGNGリンクで失敗してるんじゃなくて、それ以外の原因だった・・・鬱だ。
何やらmips1とかmips3がどうこう、と出るのです。
後、切り詰められた?みたいなメッセージが。
元々のプロジェクトが膨れ上がっている状態なので、
とても原因を探す気にならない・・・鬱だ。
00131
NGNGC++はCに比べてポインタの型チェックが厳しいので、
昔いや〜んな思いをしたことがあるのです。
NULL、void *が使われてるあたりで、ひっかかることが多いはず。
しかも自分が書いたソースじゃないので・・・
00145
NGNGいや〜んって言う前に、C++コンパイラが何を伝えようとしている
のか考えたほうがいいと思うぞ。
まぁ、いや〜んな(というかキャストが煩雑になる)シーンは無
いとはいわんが。関数ポインタ周辺とか。
>>12
全然わからん。
そのまま貼れって。ファイル名やクラス名を適当に書き換えれば
問題なかろ。
#俺が答えられるかどうかは知らんけどねー。
0015デフォルトの名無しさん
NGNGちなみにクロスコンパイル環境でやってマッスル。
コンパイラ自体を間違えてる、ということは無いとは
思うが・・・ちゃんと確認したかどうか覚えてない・・・
C++に書き直すは確実ですが、元のソースがCVSで管理されて
いるので、登録し直すのも面倒。ファイルが100以上あることを
考えると、キャストの部分を書き直すのすら面倒なのです。
collect2: ld terminated with signal 11 [セグメンテーション違反です], core dumped
〜〜/bin/ld: file_A.o: ISA mismatch (-mips1) with previous modules (-mips3)
Bad value: failed to merge target specific data of file lib_A.a(file_A.o)
lib_A.a(file_A.o): In function `FunctionTest':
file_A.o(.text+0x8): relocation truncated to fit: R_MIPS_16 data
file_A.o(.text+0x10): relocation truncated to fit: R_MIPS_16 data
file_A.o(.text+0x1a): relocation truncated to fit: R_MIPS_16 data
file_A.o(.text+0x2a): relocation truncated to fit: R_MIPS_16 data
make: *** [target.elf] Error 1
0016デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNG17さらしあげぁ
0020デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています