問題タブ [static-linking]
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++ アプリケーションの
静的リンクと動的リンク- ライブラリに静的リンクと動的リンクのどちらを使用する必要がありますか?
静的リンクと動的リンクを選択する前に注意すべき点は何ですか?
c - 静的ライブラリの自動検出とリンク
私は次の問題を抱えていますが、それは良い解決策がないようです。
たとえば、libtiffとlibX11を使用するCLIユーティリティがあります。このユーティリティの2つのバージョンを作成したいと思います。動的リンクと静的リンクです(可能な限り多くの依存関係がコンパイルされています)。
動的リンクの場合、すべてが魅力として機能します。指定する必要があり-ltiff -lX11
、リンカーは、libtiff.so
およびを参照する優れた実行可能ファイルを生成しますlibX11.so
。
静的リンクの場合、状況はさらに悪化します。次のコマンドを使用すると、次のようになります。
libtiff.aとlibX11.aで欠落しているシンボルで終わります。OK、依存しているすべてのライブラリを行に入れることができます。
しかし、私にとってこの発見を可能にするツールはありますか?libtoolはここで役立ちますか(わかります/usr/lib/libtiff.la
が、ありません/usr/lib/libX11.la
)?誰かがlibtoolの基本的な例を教えてもらえますか?libtiff
一部のプラットフォームでより狭い機能が提供され、そのプラットフォームではまったく利用できないリンクがない場合、状況は重大ですlibjpeg
。そのため、ライブラリの依存関係が満たされないため、上記のリンクコマンドは失敗します。
2番目の問題はその警告によるものです(私は信じています):
ユーティリティは、出力libc
に表示されたままのに対して静的にリンクされていません。この場合、静的ldd
に正しくリンクするにはどうすればよいですか?libX11
libc
この.a
質問は関連性がありますが、システムファイルを再パックすることはお勧めできません。
c++ - Mac OSX 10.6でlibstdc++を静的にリンクすることは可能ですか?
libstdc ++の古いコピーを持っているかもしれないが、他のすべてのツールを持っている他のMacOSXマシンでC++プログラムを実行しようとしています。Linuxのセットアップについて説明しているにもかかわらず、このSOの質問でも言及されているこのアプローチに従おうとしました。私は小さなプログラムtry.cppを持っています:
明らかに、私がそれをコンパイルするだけで、私は得ます
libSystem.B.dylibへの依存関係を理解しているので、それはそのままにしておくことができます。libstdc ++を取り除くために、私はこれを試します:
だから、やってみます
また、
最後に、これは機能します:
これで大丈夫ですか?(gccを使用してC++プログラムをlibstdc++にリンクするため)。g ++は、実際にはgccとlibstdc++を使用してC++プログラムをコンパイルするスクリプトであるとどこかで聞いたことがあります。その場合、正しく使用すれば問題ありません。
ただし、実際にはmacportコンパイラとより複雑なプログラムを使用しています。gccはC ++に準拠していますが、いくつかの警告を生成します。効果のあるもの:
これは、c++のコンパイルにgccを使用すべきではないことを示しています。要約すると、質問は次のとおりです。
- libstdc++を静的にリンクする方法
- g ++がそれを行わない場合、gccを使用してlibstdc ++を手動で提供しても大丈夫ですか?では、なぜ視界警告なのか?
- コンパイルされたライブラリの可視性の問題のために2つのアプローチのどちらも機能しない場合は、libstdc ++ソースファイル(sstream.h、list.h、vector.c)などを使用して、コンパイルに含めてください。これによりコンパイルが遅くなりますが、特定のアプリケーションでは役立つ場合があります。それはより良い最適化につながるかもしれません!
c++ - MSVCRT を静的に mingw にリンクできますか?
WindowsでコンパイルするCプログラムがありmingw
ます。正常に動作しますが、が必要MSVCRT.DLL
です。それを静的にリンクしたい(Visual Studioでできるように)。これは可能ですか?
-static
にフラグを立てようgcc
としましたが、何も変わりませんでした。
標準 C++ ライブラリも使用する C++ プログラムはどうですか?
gcc - x86_64 で静的ライブラリをコンパイルするときに、gcc が暗黙的に -fPIC フラグを提供しないのはなぜですか
静的ライブラリに対して静的にリンクする共有オブジェクトをコンパイルする際に、多くの問題が発生しました。この問題は、x84_64 プラットフォームでのみ発生します。x86_32 で同じコンパイル作業を行う場合、問題はありません。
おそらくこれは OS 固有の GCC 構成の問題ですが、私の調査では、GCC が x86_64 プラットフォームでどのように機能するかが示されています。とにかく、Ubuntu 10.04 x86_64 で gcc 4.4.3 を使用しています。
問題はどのように修正されますか?... すべての静的ライブラリの依存関係が -fPIC でコンパイルされていることを確認します。
質問 1: -fpic と -fPIC の違いは何ですか (明らかに -fPIC は x86 でより多くの命令を生成します)。x86_64 コンテキストでは、後のタイプの方が関連性が高いのはなぜですか?
質問 2:私の仮定では、静的コードに対してリンクする場合、リンク時に関数をバイナリに配線しているのに、「位置に依存しないコード」機構が提供する間接的なレベルが必要なのはなぜですか?
質問 3:共有オブジェクトを静的アーカイブにリンクするために x86 が -fpic / -fPIC を必要としない場合、なぜ x86_64 で必要なのですか?
質問 4:必要な場合でも、暗黙的に提供されないのはなぜですか? 重大な変更は絶対にダメだと思っていた
c++ - C++ で書かれたライブラリを C から呼び出す方法は?
それは私には簡単なことのように思えますが、それに対して反対する情報も賛成する情報も見つかりません。
デマングリングなどの観点からは、これは大きな問題ではないと思いますが、小さな小さな C++ ライブラリから関数を呼び出す小さな小さな C プログラムを作成する方法がわかりません。
私は現在Linuxを使用しており、静的バインディングを試しています。
これは、多くの人が直面していること、または多くの本で取り上げられていることに違いありませんが、私はこの問題の前に座っている盲目的な衝動のように感じます. 興味深いことに、SO についてもそのような質問はありません。
これが機能するかどうかさえわかりませんが、これを行う方法ははるかに少なくなります。
c++ - Windows 上の SDL を MinGW と静的にリンクするにはどうすればよいですか?
タイトル参照。Code::Blocks を使用しています。グーグルで検索すると、sdl-config sh スクリプトに関する情報が得られますが、これは明らかに Windows では使用できません。
g++ - TclPro1.4でカスタムTCLインタープリターを作成できませんでした:`__ctype_b'への未定義の参照
TclProユーザーズガイド第7章の指示に従って、TclProを使用してカスタムTCLインタープリターを作成しようとしていますが、リンクエラーで失敗しますundefined reference to __ctype_b
。
でTclPro1.4をダウンロードしてインストールしまし/opt/ajuba/TclPro1.4/
た。これが、構築したいカスタムインタプリタです。
Pro_WrapTclMain
したがって、標準で呼び出すだけTcl_Init
です。
私はsimple.cpp
このコマンドでビルドしようとしています:
これが私が受け取る最初のエラーメッセージです(完全なログは下部にあります):
TclPro__ctype_b
がlibc.aで定義されることを期待しているシンボルのようですが、
与える
したがって、libc.aで定義されている__ctype_bはありません。
問題は、この状況でTclProを使用してカスタムTCLインタープリターを構築する方法です。
__ctype_b
で定義する必要がある場合libc.a
、適切なものを取得するにはどうすればよいlibc.a
ですか?
コンパイルの完全なログは次のとおりです。
c++ - リンクエラー:テンプレート化されたフレンド演算子のオーバーロード
奇妙なリンクエラーが発生しています。この種の問題を回避するために、ここに示す手順に従いましたが、ヘッダーと実装ファイルを分割する方法がわかりません。
これが私のテストファイルです:
class cargo
テストに含まれるヘッダーファイル:
そしてその実装:
私はCMakeを使用して、すべてをコンパイルしてリンクしています。私が得るリンクエラーは、以下への未定義の参照に関するものoperator <<
です。
私は何が間違っているのですか?私を助けてください!
qt - Qt + Google プロトコル バッファ、ライブラリのリンクに関する問題
うまくいけば、これは簡単な質問です:
Qt でアプリケーションを構築しており、Google のプロトコル バッファを使用したいと考えています。protobuf ソースをダウンロードしてインストールしたので、プロジェクトでそれをリンクしたいと思います。
私の.proファイルには次の行が含まれています。
ただし、次のエラーが表示されます。
コンパイルしようとすると。
私はかなり基本的な間違ったことをしていると思います。助けてくれてありがとう!