問題タブ [gcc6]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cuda - GCC 6.x で CUDA 8.0 を使用する - 不適切な関数オーバーロードに関する苦情
私のディストリビューションのデフォルトコンパイラであるGCC 6.2.1を使用していくつかのCUDAコードを構築しようとしています(注:CUDAで公式にサポートされているGCCバージョンではないため、これを実験的と呼ぶことができます)。これは、GCC 4.9.3 および CUDA バージョン 7.5 と 8.0 の両方で正常にビルドされるコードです。
さて、次の(それに近い)最小限の例を作成すると:
コマンドラインで
次のエラーが表示されます。
何故ですか?これを修正/回避するにはどうすればよいですか?
xcode - XCODE GCC6 互換性
homebrew を使用して GCC の最新バージョン (6.2.0) をダウンロードしました。コマンドラインからうまく機能します(XCODEが行うg ++オーバーライドではなく、実際に使用していることを確認する必要があります)
このバージョンの GCC をコンパイラとして使用するように XCODE に指示しようとすると、互換性がないと表示されます。
間違ったものをダウンロードしましたか?これは単に新しいからなのでしょうか?
gcc - target_clones 属性の「グローバル」バージョンはありますか、またはありますか?
私は最近target_clones
、gcc 6.1 以降で利用可能な属性をいじってみました。これはかなり気の利いたものですが、今のところ、やや不器用なアプローチが必要です。マルチバージョン化が必要なすべての関数には、属性を手動で宣言する必要があります。以下の理由により、これは最適とは言えません。
- コンパイラ固有のものをコードに入れます。
- 開発者は、どの関数がこの処理を受ける必要があるかを特定する必要があります。
利用可能な場合、AVX2 命令を利用するコードをコンパイルしたい例を見てみましょう。-fopt-info-vect
を使用してビルドすると、どの関数がベクトル化されたかが-mavx2
わかるため、コンパイラーは既にこれを認識しています。グローバルに、コンパイラに次のように伝える方法はありますか? そうでない場合は、お願いできますか?
gcc - gcc 6.2.0 は、共有オブジェクトを作成すべきではないときに作成しようとしていますか?
gcc 6.2.0 までは、非再配置可能アセンブラー コードのリンクは問題になりませんでした。これを開始した正確なバージョンはわかりませんが、gcc 5.4.0 (およびそれ以下) では次のように動作しました。
ただし、gcc 6.2.0 では:
静的リンクを強制しようとすると、別の問題が発生します。
gethostbyname() を使用すると、プログラムのセグメンテーション違反が発生します (ただし、それ以外の場合は機能します)。
また、静的と動的を混在させようとしてもうまくいきません。
何か案は?プロジェクトへのリンク: https://github.com/niryeffet/ribs2
c++ - Valgrind レポートの不一致 free() / delete / delete []
malloc
複数のシステムで動作するライブラリを作成しています (そのうちのいくつかは stdlibを持っていません)。私の stdlib (別のライブラリ) では、new
anddelete
演算子をオーバーライドして関数の汎用呼び出しを行っています (この例にはこれらの関数がありません)。各システムは、それぞれのメモリ割り当てデバイスへのこれらの一般的な呼び出しをオーバーライドします。
問題は、私がこれをやろうとするときです。問題を再現するためのコード例を以下にいくつか示します。
プレーンgcc-6
(引数なし) でビルドして (引数なし) で実行するとvalgrind
、次のエラーが発生します。
オペレーターは正しく動作しているように見えますdelete
が、Valgrind がオーバーライドされたnew
オペレーターをオーバーライドしています。これを修正する方法はありますか?
そこに他のコードがあるため、中間関数を削除することはオプションではありません。
私の実際のプログラムでどのように動作するかの例 (繰り返しますが、私の例には示されていません):
gcc v6.2.0、valgrind v3.12.0、および Ubuntu 16.10 を使用しています。
c++ - std::complex 間の型の不一致リンク時の最適化を使用した gcc 6 の下での C++ および Fortran の complex*16
C++ から Fortran ルーチンを呼び出す科学計算コードを使用していますが、gcc 6 で突然警告が表示されるようになりました。ベアボーンの問題は次のとおりです。
mult
で定義されている Fortran サブルーチンを考えてみましょうmult.f90
。
これを C++ ファイルから呼び出しますtest.cpp
。
g++-6 を使用してファイルをコンパイルすると、次の警告が表示されます。
次のいずれかを行うと、警告は消えます。
- g++-6 (私が持っているバージョンは 6.2.0) を g++-5 (バージョン 5.4.1) に置き換えます。
-flto
フラグなしでコンパイルする- double (std::complex の代わりに) と real*8 (complex*16 の代わりに) を使用します。
心配する必要がありますか、それとも無視できる警告ですか? 前者の場合、どうすれば問題を解決できますか?