問題タブ [inline-functions]
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++ - c ++:ヘッダー関数がライブラリからexeに正しくリンクされていません
ライブラリ(alibrary.lib)にヘッダーファイルがあります。ライブラリは静的ライブラリ(.lib)であり、exeに適切にリンクします。
今、私はクラスVector3dを持っています。
}
Vector3dは、ヘッダーファイル(Vector3d .h)で宣言および定義されています。クラス宣言の後、私はクロス関数です。
libコンパイルはファイルですが、単体テストexeにリンクすると、次のエラーが発生します。
何か案は?
ありがとう
c - コンパイラ/リンク エラー: Freedup
freedup と呼ばれる重複ファイルをハードリンクするためのプログラムをコンパイルしようとしています。私はプログラムの作者/管理者に電子メールを送ろうとしましたが、それから長い時間が経ち、彼から何も連絡がありません.
gcc (3.4.4-999) と make (3.81-2) の最新の安定バージョンを使用して、cygwin 環境からプログラムをコンパイルしようとしています。すべてのオブジェクト ファイルを削除して make を実行しようとしましたが、常に次のエラーが発生します。
freedup.o: 関数 'main' 内:
/home/[user]/freedup-1.5/freedup.c:1791: '_hashed' への未定義の参照
collect2: ld が 1 の終了ステータスを返しました make: * * * [freedup] エラー 1
ソースコードを調べたところ、「ハッシュされた」関数がインライン関数であることがわかりました(ソースファイルの外で宣言する必要はないと思いました...しかし、それは予備のグーグルから集めたものです)。
このプログラムを Windows 環境でコンパイルしてみて、運が良ければ、本当に感謝します。ありがとう
ソース ファイルへの直接リンクは次のとおりです: http://freedup.org/freedup-1.5-3-src.tgz
c++ - 静的ライブラリをリンクする際のインライン関数の複数定義
mingw (Windows 用 gcc) でコンパイルする C++ プログラムがあります。gcc 4.4.1 を含む mingw の TDM リリースを使用します。実行可能ファイルは、2 つの静的ライブラリ (.a) ファイルにリンクしています。そのうちの 1 つは C で記述されたサードパーティ ライブラリです。もう 1 つは、私が作成した C++ ライブラリで、C ライブラリを使用して独自の C++ API を提供します。
C ライブラリの機能の (私の見解では、過度の) 一部がインライン関数で実装されています。C ライブラリの API を使用するときにインライン関数を含めることは避けられませんが、すべてをリンクしようとすると、すべてのインライン関数の複数の定義があるというリンク エラーが発生します。私のC++ラッパーライブラリと私が持っていないライブラリで呼び出された場合、基本的にヘッダーでインラインで定義されたものはすべて、CライブラリとC++ライブラリの両方で作成された関数を取得しています.
インクルード ファイルが同じプロジェクト内の異なる .c または .cpp ファイルで複数回使用されている場合、複数の定義エラーは発生しません。問題は、ライブラリごとに 1 つの定義が生成されることだけです。
コンパイラが両方のライブラリでこれらのインライン関数の関数とシンボルを生成する方法/理由は? コードでそれらの生成を強制的に停止するにはどうすればよいですか? .a ファイルから重複した関数を削除するために実行できるツール、またはリンカーに複数の定義を無視させる方法はありますか?
(参考までに、サードパーティのライブラリには、すべてのヘッダーに #ifdef __cplusplus および extern "C" ガードが含まれています。とにかく、それが問題である場合、シンボルの複数定義は発生しません。シンボルが定義されていないか、少なくとも異なります。)
特に、サード パーティの C ライブラリの DLL にリンクすると、リンク エラーは発生しません。ただし、DLLから呼び出す必要がある独自のバージョンの関数を持つコードに関係しているように見える奇妙なランタイムエラーが発生します。(あたかもコンパイラが私が求めていない関数のローカル バージョンを作成しているかのように。)
この質問の同様のバージョンが以前に尋ねられましたが、これらのいずれにおいても私の状況に対する答えが見つかりませんでした:
この質問に対する答えは、ポスターが変数を複数定義しているということでした。私の問題は、インライン関数の複数の定義です: 複数の cpps に同じヘッダーを含めることによる複数の定義エラーの繰り返し
これは MSVC プログラムでしたが、mingw を使用しています。また、この質問でのポスターの問題は、ヘッダー内のクラス本体の外側にある C++ クラス コンストラクターの定義でしたが、私の問題はインラインの C 関数にあります: Static Lib Multiple Definition Problem
この愚か者はすべての C コードの名前を C++ ファイルに変更しましたが、彼の C コードは C++ セーフではありませんでした: リンク時に多数の std:: 関数を複数定義する
これは、1 つの定義ルールに違反してもエラーにならない理由を知りたいだけでした: 定義が異なるインライン関数の予測できない動作
c# - このデリゲートを実装するにはどうすればよいですか?
アクションは params string[] をパラメーターとしてサポートしていないようですので、私は書きました
私はこの機能を持っています
関数を書きたいのですが、構文がわかりません。それのようなもの
これはどうやって書くの?
c++ - インライン関数
コンパイラは、プログラマが要求したかどうかにかかわらず、関数のインライン展開を実行する場合と実行しない場合があることを知っています。
知りたかったのですが、コンパイラーが特定の関数をインライン化したことをプログラマーが確実に知る方法はありますか?
c - 内部リンケージを備えたインライン関数?
Cの場合:内部リンケージを持つ(つまり、静的に宣言された)インライン関数のみが静的ストレージ期間を持つファイルスコープの変数または関数を参照(つまり、アドレスのコピー、読み取り、書き込み、または呼び出し)できるのに対し、他のインライン関数は参照できないのはなぜですか? ?
c++ - C++ のインライン関数
クラス定義自体の内部でメンバー関数を定義する場合、それは必然的にインラインで処理されますか、それとも無視できるコンパイラへの単なる要求ですか。
c++ - c++ インライン関数
C++ でインライン関数を実行する方法について混乱しています....
この関数を言ってみましょう。どのようにインライン関数に変換されますか
c - C のインライン関数と呼び出しコスト
ベクトル/行列ライブラリを作成しています。(GCC、ARM NEON、iPhone)
関数呼び出し時のデータコピーによるパフォーマンスの低下を避けるために、構造体データをポインターとして渡しました。だから私は最初にこのような関数を設計しました:
しかし、関数がインラインの場合、パフォーマンスのために値をポインターとして渡す理由はありますか? それらの変数もコピーされますか? レジスタとキャッシュはどうですか?私はこのように機能を再設計しようとしました:
それぞれの場合の通話料金はどのようにお考えですか。
- 提案を反映するために、2 番目の署名に「const」を追加しました。
c - Cの他のインライン関数のインライン関数
このコードは次のようになります:
次のようなコードに変換されますか?:
GCC、ARM (iPhone)