2016-05-30 15 views
1

私たちはGCCでOCCIを使用しようとしています。 OCCIは、Sun Studioコンパイラを使用してコンパイルされます。 SunのネイティブコンパイラCCではなく、GCCでOCCIを使用する可能性はありますか?OCCI with GCC with SOLARIS

+0

試してみる必要があります。 C++ ABIは複雑であり、問​​題がある可能性があります。 – ibre5041

+0

サードパーティのライブラリ以外にも、この問題を解決するためのOracleライブラリがありますか? –

+0

私の個人的な意見は、OCIを中心に他のオープンソースのC++を使用する方が良いということです。 OCCIより。 – ibre5041

答えて

0

効果的に複数のC++ランタイムライブラリを混在させることはできません。

C++実行時の実装は非常に複雑です。この投稿は、複雑さのいくつかを説明します

Stability of the C++ ABI: Evolution of a Programming Language

C++ ABI

C++ ABIは、C ABIが含まれています。階層クラスオブジェクトの

  • レイアウト、つまり、基底クラスと仮想基本クラスへのポインタ部材

  • 通過

  • レイアウト:また、以下 特徴をカバー隠し関数のパラメータ(例:this)

  • 仮想関数を呼び出す方法

    • ポインタのオブジェクトで

      のVtableの内容及びレイアウト

    • ロケーションベースクラスオフセットを見つけるこのポインタ

  • ため

  • 検索調整のvtableし

  • メンバへのポインタを使用して関数を呼び出す

  • テンプレートインスタンスの管理

  • 外部名のスペル( "名前マングル")

  • 建設と静的オブジェクトの破壊

  • 投げや例外

  • のいくつかの詳細を引きます標準ライブラリ:

      あなたはまた、別のCの++コンパイラで追加することができますメンバー

から

  • 実装定義の詳細

  • のTypeInfoと実行時型情報

  • インライン機能へのアクセスを実装Solaris上でOCCIをGCCで直接使用することは効果的ではありません。

    あなたは何か働くことができるかもしれませんが、あなたがすることは、最高でも非常に壊れやすいでしょう。次回のOSやC++のランタイムアップデートでは問題が発生する可能性があり、問題を解決できない場合があります。

    非常に単純なアプリケーションを作成していない限り、Solaris Studioコンパイラを使用することを強くお勧めします。パフォーマンスプロファイリング、メモリチェック、さらには競合状態検出を含むツールスイート全体を理解しておくことをお勧めします。私の意見では、GCCで使用されるツールよりも優れています。

  • +0

    Solaris Studio(SS)コンパイラはいくつかのGCC機能を失います。 GCCの警告モードに近いものは何もありません。スタックプロテクターはなく、強化ソースはサポートされていません。 GCC/Linux Studio/Solarisを比較すると、メモリチェック、競合状態検出などのためのGCCの異なるサニタイザ(アドレス、未定義の動作など)は、SSで得られるものよりもはるかに優れています。プロファイリングについても同様のことが言えます。さらに、SSは現在のC++標準をサポートし、GCC拡張に追いつくのに苦労しています。 – maxschlepzig

    +0

    @maxschlepzig *はあなたがSSで得るものよりも明らかに優れています*少なくとも私の好みは意見であり、それを事実と混同しないことを明確に述べました。 FWIW、最後に私はSPARCのGCCにはまだ '' -xmemalign = 1i'(https://docs.oracle.com/cd/E19205-01/819-5265/bjavc/index.html)のようなものがないことがわかりました。 SPARC上に作業コードを記述するためのバーは、GCCを使用するほうがずっと高いです。 –