- BonDriver共有ツール総合
396 :名無しさん@編集中[sage]:2014/06/22(日) 12:44:54.09 ID:xaEB7cEW - >>394
Cent5の環境で、IBonDriver*.hに、仮想デストラクタを追加したら warningは消えました。 ダウンキャスト失敗の方は現象変わらずです。 warningとは別件だったみたいです。 CentOS5みたいな古いOSを使っている人は少ないかな..
|
- BonDriver共有ツール総合
398 :名無しさん@編集中[sage]:2014/06/22(日) 19:17:58.89 ID:xaEB7cEW - >>397
sample.cppのコンパイル時に以下のエラーがでました。 --- sample.cpp:(.text+0x26e): undefined reference to `typeinfo for IBonDriver2' sample.cpp:(.text+0x276): undefined reference to `typeinfo for IBonDriver' --- とりあえず、sample.cpp側にも上と同じ、IBonDriver*のデストラクタの実体を定義して、 コンパイルを通しました。(何が正解かは不明ですが) 結果としてはNGです。ダウンキャストの失敗は変わらずです。
|
- BonDriver共有ツール総合
401 :名無しさん@編集中[sage]:2014/06/22(日) 19:39:42.03 ID:xaEB7cEW - > とりあえず、sample.cpp側にも上と同じ、IBonDriver*のデストラクタの実体を定義して、
> コンパイルを通しました。(何が正解かは不明ですが) これは適当すぎなので止めて、BonDriver_Proxy.soとリンクしてみました。 ダウンキャストは失敗せず、正常に動いているようです。 リンクしちゃうとdlpenしてる意味が無くなっちゃうんですけどね
|
- BonDriver共有ツール総合
403 :名無しさん@編集中[sage]:2014/06/22(日) 19:51:16.75 ID:xaEB7cEW - 無知でスマン。Linuxでタイプライブラリ使ったこと無いんだ.。
|
- BonDriver共有ツール総合
407 :名無しさん@編集中[sage]:2014/06/22(日) 20:33:01.26 ID:xaEB7cEW - > あああ失礼、sample.cpp側からは実体が見えなくなるので宣言だけにしちゃうと当然エラー出るようになりますね
> この場合はヘッダでは純粋仮想デストラクタとして > -- > virtual ~IBonDriver() = 0; > --- 上記はまだ試してないです。 ちょっと手元でコードを弄っているのですが、dlopenを止めて soをリンク、CreateBonDriverを直接呼び出すようにすると ダウンキャストに成功するんですよね。
|
- BonDriver共有ツール総合
413 :名無しさん@編集中[sage]:2014/06/22(日) 23:31:38.17 ID:xaEB7cEW - ttp://stackoverflow.com/questions/2351786/dynamic-cast-fails-when-used-with-dlopen-dlsym
この辺ぽかった sampleコンパイル時に-Wl,-Eで動作するようになった
|