問題タブ [linkage]
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.
exception - Gradle + Sonar + Groovy = FAIL?
実行中:
groovy プロジェクトの場合、次のエラーが発生します:ローダー制約違反: ローダー (org/codehaus/plexus/classworlds/realm/ClassRealm のインスタンス) は以前に名前が「groovyjarjarantlr/TokenStream」の別のタイプのロードを開始しました
これはどのように修正できますか?
使用バージョン:
- グラドル-1.0-マイルストーン-8a
- org.codehaus.groovy:groovy:1.8.4
- ソナー2.13
完全なスタック トレース:
visual-studio - プロジェクトのデバッグおよびリリース構成で使用するサードパーティ ライブラリを適切にビルドするにはどうすればよいですか?
異なるバージョンの MSVC でいくつかのプロジェクトで使用するサード パーティ製ライブラリをビルドする必要がある場合、通常はすべてのMSVC バージョンとデバッグ構成とリリース構成の両方に対してビルドします。それがブーストの役割であり、私たちのチームがこれまでずっとやってきたことです。
しかし、私はまだ理解していません.どうしてこのライブラリをビルドできなかったのですか...何でも. 必要なのは、関数プロトタイプとオブジェクト コードだけですよね? CRT を静的にリンクしているので、外部依存関係はありません。しかし、MSVC8 の Release でビルドされたライブラリを MSVC10 の Debug のプロジェクトにリンクしようとすると、この迷惑な「定義済み」リンカー エラーが発生します。
しかし、なぜ?このすべての関数を lib 内に「カプセル化」し、それらをエクスポートせずにプロジェクトが lib から必要なものだけを取得できるようにすることはできますか? すべてのプロジェクトでリンクできる libpng と zlib のプリコンパイル済みバージョンを使用できるのはなぜですか? はい、MSVC を使用してビルドされていないと思いますが、CRT の同じ機能を使用しています。誰かが詳細に説明したり、この問題の賢明な説明へのリンクを共有したりできますか?
actionscript-3 - ファイルが見つかりません AS3
AS3でプログラムを書いています。ここでは正確な内容は問題ではないようです。私は基本的に4つのファイルに分割された4つのクラスを持っています。問題は、これらのファイルの 1 つが見つからず、その理由がわかりません。何度も確認し、先生にも確認してもらいましたが、いまだにどこが悪いのかわかりません。他の誰かが同様の問題を抱えていましたか、またはこの問題を解決する方法について何か考えがありましたか?
編集: 37 行目 1046: タイプが見つからないか、コンパイル時の定数ではありません: CustomTextField. 37 行目 1180: 未定義の可能性があるメソッド CustomTextField を呼び出します。(2回)
2 番目のファイル:
java - この Weblogic 断続的な java.lang.LinkageError を解決するにはどうすればよいですか? それが何を意味するのかを理解し、修正するための手順は何ですか?
断続的なリンケージ エラーがスローされます: (基本的に、これがすべての情報です)
または、より読みやすい方法で
例外: java.lang.LinkageError
- 分野:
service
- CL インスタンス:
java.net.FactoryURLClassLoader
- 参照クラス:
org.apache.axis.client.Stub
- 2 番目の CL インスタンス:
weblogic.utils.classloaders.ChangeAwareClassLoader
- フィールドの解決タイプ:
java.xml.rpc.Service
- 分野:
これは、2 つのバージョンの java.xml.rpc.Service がロードされているということですか? そうですか?どうすればそれが起こりますか?それを解決する方法は何ですか?
c - 共有ライブラリやアプリケーションとの CRT 連携
Windows アプリケーションは CRT を動的にリンクします。アプリケーションがそのコードの一部を実行した後、共有ライブラリをロードします。共有ライブラリは CRT と静的にリンクされます。
私の質問は:
アプリケーションが「CRT 状態」に何らかの変更を加えた場合 (たとえば、一部のファイルで stdout を再度開くなど)、これらの変更は dll コードで有効になりますか?
ありがとうございました
c - 外部で定義された構造体を呼び出す方法と場所
ファイル: element.h
element.h と element.cで構造体を宣言して定義しましたElement
(示されていませんが、malloc が実行される場所)。
ファイルの関数の 1 つがparser.c
アクセスする必要がありますElement
。何らかの条件が適用される場合、への新しいポインターElement
が作成され、ポインター属性の 1 つが埋められます。その後のいくつかの反復で、他の条件が適用される場合、別のポインター属性がテキストを取得します。次に、他の条件が満たされたときに、へのポインタをElement
別のファイルの関数に渡す必要があります: output.c
.
私の質問は、どのように、どこに電話すればよいかElement
です。条件内でそれへのポインターを作成する場合、if
それは自動変数です。関数が繰り返されるときは表示されません。
宣言できstatic
ますが、コンパイラはエラーを返しますerror: 'e' undeclared (first use in this function)
。例: 反復 1 では、ポインターはif
ステートメントの 1 つの分岐で作成されます。イテレーション 2 では、 の別のブランチにif
アクセスし、次のようなことを行いますe->etag = "a";
を宣言すると、 (最初の)extern Element * e;
の 2 番目の分岐で同じエラーが発生します。if
else if
ファイル output.c
ファイル parser.c
c++ - 未解決の外部シンボル「std::basic_string」
Visual C++ コンパイラを介して Maven でプロジェクトをコンパイルしようとしていますが、std::basic_string クラスに関してリンケージ エラーが発生し続けます。< string > ヘッダー ファイルを対応する C++ ファイルに含めるようにしました。
私は何かを逃しましたか、それともばかげた間違いをしましたか??? どこで間違ったのか教えてください。
gcc - gcc 未定義 _cxa_pure_virtual
2 つの共有オブジェクト ライブラリと 1 つの実行可能ファイルがあります。
コンパイルしたライブラリの 1 つにリンケージ エラーがあります: Undefined _cxa_pure_virtual
.
なんで?通常、実装する必要はありません。何か案は?
私がそれを実装すると、両方のライブラリがコンパイルおよびリンクされますが、両方にリンクするアプリケーションには同じリンケージの問題がありますか?
c++ - 未定義の参照エラーは私には意味がありません
私はここにこのコードを持っています:
Main.cpp
と私のクラス:
AStarPlanner.h
AStarPlanner.cpp
間違いは見当たりません。関数が定義され、私のmain.cppはクラスについて知っています。
CMakeList
しかし、私はこのエラーを受け取ります:AStarPlanner ::〜AStarPlanner()
への未定義の参照'vtable for AStarPlanner'**
** undefined reference to
c - 外部リンケージなしで翻訳単位間で関数の内部セットを共有するにはどうすればよいでしょうか?
ライブラリを書いていて、自分用に書いたユーティリティ関数がたくさんあるとしましょう。もちろん、これらの関数に外部リンケージを持たせて、ライブラリ ユーザーが混同しないようにする必要はありません (ほとんどの場合、関数の存在を外の世界に伝えないためです)。
一方、これらの関数は異なる翻訳単位で使用される可能性があるため、内部で共有する必要があります。
例を挙げましょう。いくつかのことを行うライブラリがあり、さまざまなソースファイルで必要になる場合があるためcopy_file
、create_directory
それらをユーティリティ関数として実装します。
同じ名前の関数があるためにライブラリのユーザーが誤ってリンケージ エラーにならないようにするために、次の解決策を考えることができます。
- ひどい方法:関数を使用するすべてのファイルに関数をコピーして貼り付け、
static
宣言に追加します。 - 良い方法ではありません: それらをマクロとして記述します。私はマクロが好きですが、これはここではありません。
- ユーザーが同じ名前を作成する可能性が十分に小さくなるように、奇妙な名前を付けます。これは機能するかもしれませんが、それらを使用するコードは非常に見苦しくなります。
- 私が現在行っていること:
static
内部utils.h
ファイルに関数として記述し、そのファイルをソース ファイルに含めます。
最後のオプションは、1 つの問題があることを除けば、ほぼ問題なく動作します。関数の 1 つを使用しない場合、少なくとも警告が表示されます (関数は static として宣言されていますが、使用されていません)。私を狂ったと呼んでください、しかし私は自分のコードの警告を自由に保ちます。
私がやったのは、次のようなものでした。
ユーティリティ.h:
file1.c:
file2.c
ただし、この方法の問題点は、ユーティリティが導入されるにつれて見苦しくなることです。このような関数が 10 個あると想像してみてください。これらの関数が 7~8 個必要な場合は、インクルードの前に 7~8 行の定義が必要です!
もちろん、別の方法としてDONT_USE_*
、関数を除外するタイプのマクロを使用することもできますが、その場合も、これらのユーティリティ関数をほとんど使用しないファイルに対して多くの定義が必要になります。
どう見てもエレガントじゃない。
私の質問は、どうすれば自分のライブラリの内部にある関数を複数の翻訳単位で使用し、外部リンケージを避けることができるでしょうか?