問題タブ [clang++]
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.
c++ - OS X で clang++ とリンクすると、多くのシンボルが見つからないというエラーが生成されます
clang++ コンパイラを使用して、OS X 10.8 でいくつかの C++ コード (C++11 機能を含む) をコンパイルしようとしています。オブジェクトファイルを生成するメイクファイルがあります OK、次にコマンドで:
アーキテクチャ x86_64 のシンボルが見つからないというエラーが大量に発生します。このコードは、g++ を使用し、C++11 サポート用にコンパイラ フラグを適切に変更する *nix システムで正常に動作します。*.o をコンパイルするには、次のようにしています。
編集:リンクコマンドの出力は次のとおりです。
c++ - 静的ライブラリによる条件付きリンク
C++ で大きな静的ライブラリを作成しています。そのライブラリでは、多くの静的ライブラリと動的ライブラリのシンボルを使用しています。私がそれを「作成」するとき、それは静的であるため、ライブラリに対してリンクする必要はありません。これが私の問題です。私の静的ライブラリは非常に一般的です。これは、同じインターフェースに対していくつかの実装を提供します (ドライバのような実装を見ることができます。libA は独自の実装を提供し、libB はそのような実装を提供します)。一部の実装はプラットフォームに依存するため、これらの実装は一緒に使用することを意図していません。
ライブラリにリンクすると問題が発生します。クライアントのコードがライブラリのシンボルに依存していない場合でも、クライアントは、ライブラリがシンボルを使用したすべてのライブラリに対してリンクする必要があります。たとえば、クライアントのコードがlibAのみに依存している場合でも、静的ライブラリには libB からのシンボルがいくつかあるため、クライアントはlibBに対してリンクする必要があります。
このような動作を排除し、実際に使用されているライブラリにのみリンクして、クライアントのコード内のシンボルを推測する方法を知っていますか?
ありがとうございました。
c++ - clang++ と g++ の両方でコンパイル中に c++ エラーが発生する
ユーザープログラムの制御フローを変更するプロジェクトに取り組んでいます。これにはllvmを使用しています。最後に、clang++ を使用して一連の .s ファイルを生成します。次に、g++ を使用してそれらをすべてマージします。この段階で多くのエラーが発生するため、(g ++の代わりに)clang ++を使用できません(これは現在の問題ではありません)
C プログラム (gcc および clang) の場合、問題なく動作しています。しかし、C++ ユーザー コード (g++、clang++) の場合、実行時に次のエラーが発生します。
g++ -O3 -rdynamic *.s -o main.exe -Wa,-Iressource -lstdc++ -lm -ldl
私のインターネットでの検索によると、ほとんどの人にとって、(clang++ の代わりに)clang を使用しているため、このエラーが発生しました。
クラン
clang --version clang バージョン 3.1 (ブランチ/release_31)
ターゲット: x86_64-unknown-linux-gnu
スレッドモデル: posix
g++
g++ --バージョン
g++ (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3
実際の問題がどこにあるのかわかりません。しかし、単純に clang++ を使用して *.s ファイルを生成し、次に g++ を (llvm パスなしで) 使用すると、正常に動作することがわかっています。llvm は最後まで文句を言わず、g++ は文句を言うので、実際のエラーがどこで発生したかはわかりません。前に述べたように、元のコードが (clang と gcc を使用して) "C" である場合、問題なく動作します。
続行方法や問題を解決するための解決策についてのヘルプをいただければ幸いです。
特に(このコンテキストで)につながる可能性があるもの
- __cxx_global_var_init への未定義の参照
- をキーとするグローバル コンストラクタ
macos - Mac OS X でのアグリゲーション初期化の clang サポート
Macのclang ++でC ++ 11リスト集合の初期化をコンパイルしようとしています。
これはコンパイルのためのコマンドです。
一致するコンストラクタ エラーが発生しませんでした。
XCodeでやってみた
ポートからclang ++も試しました
同じ結果が得られました。何が間違っている可能性がありますか?
c++11 - なぜclang ++にはフォワードリストがないのですか?
forward_list
次のようなものに依存する単純な C++ プログラムを作成しました。
ただし、Mac でこのプログラムをコンパイルすると、次のclang++ my_program.cpp -std=c++11 -o my_program
エラーが発生します。
なぜclang findができないのforward_list
ですか?他の C++11 機能は動作しています。たとえば、C++ 11 の機能であるauto
ことを示す警告が表示されますが、キーワードは機能します。auto
c++ - Objective-C++ と演算子 ->
operator ->
Objective-Cに問題があります。
ObjC クラスに C++ ラッパーが必要です。
だから私は自分のクラスを作成しました:
そしてラッパークラスも:
それを介してバッキングオブジェクトにアクセスしようとすると、operator User*
うまくいきます:
しかし、このオブジェクトにアクセスしようとするとoperator ->
次のエラーがあります。
の理解operator ->
が間違っているようです。
誰かが私が間違っていることと、この問題を修正する方法について説明していますか?
バッキングオブジェクトに直接アクセスする別の方法があるのではないでしょうか?