私はいくつかの異種組織にまたがるプロジェクトでredhat 5.2を扱っています。各組織は、さまざまなバージョンのg ++でコンパイルされたライブラリを提供しています。現在、これらのバージョンには4.1.1,4.1.2、および4.3.1が含まれています。私はすべてのライブラリを4.1.2を使って実行可能ファイルにリンクしようとしています。これを行うことで何が問題になるのでしょうか?さて、各コンパイラのバージョンがどのABIをビルドするかを知る方法はありますか?異なるC++コンパイラのライブラリを混在させる
答えて
実行可能ファイルを静的にリンクする方が簡単かもしれません...大きなバイナリを作成しますが、すべてのプラットフォームで実行します。
このABIポリシードキュメントは、異なるABIバージョン間の互換性を詳述しています。 それによると、libstdc++.so
ライブラリは互換性があり、gccがバイナリ互換性を破った最後の時刻は3.4でした。あなたは大丈夫です。
g ++のさまざまなバージョンから構築されたライブラリをリンクする際に、g ++のWebサイトにリストされていない限り問題はありません。しかし重要なのは、これらのライブラリは、あなたのケースではredhat 5.2と同じプラットフォーム上に構築されるということです。 linux/redhat(solarisと言う)以外のプラットフォーム用に構築されたライブラリはあなたのexeとリンクしません。
IIRCでは、これを行うために使用されるC++互換ライブラリがあります。私はそれがlibstdC++ - compatと呼ばれると思う。
異なるバージョンのstdlibC++に依存するオブジェクトをリンクすることはできません。 – ephemient
GCC(GNU Compiler Collection)では、バージョン番号と互換性が定義されています。
4.1.1と4.1.2の間のG ++ライブラリは互換性があります。最新のものとリンクしてください。
4.1.xと4.2.xの間のG ++ライブラリは互換性がありません。何かを再コンパイルする必要があります。
3.x.yと4.p.qの間のG ++ライブラリは互換性がありません。何かを再コンパイルする必要があります。
ご使用のシナリオでは、4.3.1で構築されたコードは他のコードと互換性がありません。
4.3.xで現在コンパイルされているコードを再構築して4.1.xを使用するか、4.1.xでコンパイルされたコードを再コンパイルして4.3.xを使用する必要があります。
それは理論ですが、実際には最後のABIの変更は3.4 –
です@エド:しかし、将来はいつでも、そのルールを呼び起こす変更があり、物事にうんざりしている人が驚き(再コンパイルする必要があります)。 –
- 1. C/C++ライブラリを混在させる
- 2. Linux用のコードで異なるバージョンのライブラリを混在させる
- 3. C++とObjective Cを混在させる
- 4. Cとアセンブリファイルを混在させる
- 5. 異なるfortranコンパイラ間のFortran dllライブラリ
- 6. 異なるコンパイラでのC++標準ライブラリの実装
- 7. Cコンパイラの混乱
- 8. が混在Cとのpthreadライブラリと
- 9. 最適化レベルの異なる2つの静的ライブラリを混在させることは可能ですか?
- 10. 1つのライブラリに基づいた異なるAPIを混在させることはできますか?
- 11. 低レベルのC/C++コードを混在させる
- 12. C/C++を混在させてプログラムを終了するには
- 13. AngularJS異なるモジュールから同じ名前のコントローラを混在させる
- 14. xcodeでCと目的Cを混在させる
- 15. Silverlight 4〜5の問題をアップグレードする - ライブラリを混在させる?
- 16. ActiveRecordの条件を混在させる
- 17. jQueryとAngular4を混在させる方法が異なります
- 18. Swift PodでObjective-Cファイルを混在させる
- 19. C#とVB.NETプロジェクトを混在させる= "Go to definition"
- 20. iOS UIKitとCocos2dを混在させる
- 21. Golang:UDPサーバーとGinを混在させる
- 22. SQLite DBとGetSharedPreferences()を混在させる
- 23. タイトルとタグを混在させるフォームフィールド
- 24. CommonJSとオーダーローダーを混在させる
- 25. ウェブサイトとRESTを混在させる
- 26. 2フェーズボコーダーフレームを混在させる
- 27. GridViewが異なるセルを混在させているように見えるのはなぜですか?
- 28. 異なるコンパイラ、異なる構文
- 29. C++ 11 std :: threadとCシステムスレッド(つまりpthreads)を混在させる
- 30. CMake(Objective-CとC++を混在させたCake)でリンクするココアライブラリ
最初は、あなたが10歳以上のRed Hat 5.2(Apollo)を意味すると思っていました。 :) – bk1e