問題タブ [static-libraries]
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# - スタティック ライブラリに相当する .NET は?
「通常のユーザー」バージョンと「プロ」バージョンの 2 つのバージョンで、マネージ コード (主に C++/CLI) でツールを構築しています。
コア コードが 2 つのバージョン間で同一であるという事実は、結果のツールを単一のアセンブリ (DLL) としてパッケージ化する必要があり、共通の .cpp ファイルを含める必要がないため、少し問題を引き起こしました。ツールの 2 つのバージョンのプロジェクトのコード。共通コード用のプロジェクトとツールの各バージョン用のプロジェクトを用意し、ツール プロジェクトの各バージョンを共通コードに依存させ、必要に応じてリンクさせたいと思います。
アンマネージ C++ では、共通コードを静的ライブラリに配置し、ツールの両方のバージョンをそれにリンクすることでこれを行います。これを C++/CLI で動作させることができないようです。共通コードを DLL アセンブリにビルドすることを余儀なくされているようで、その結果、必要以上の DLL が作成されます。
要するに、1 つのプロジェクトで共通コードをビルドし、それを各最終製品プロジェクトにリンクして、共通コードを含む 2 つの 1 つの DLL アセンブリを生成する方法がわかりません。
私はおそらく何か間違ったことをしているのですが、ネットモジュールなどを使ってこれを行う方法を考え出そうとしましたが、うまくいきませんでした。最終的に、私がそれを機能させる唯一の方法は、機能する結果ではなく、共通コードアセンブリのビルド製品をリンクするようにリンカに指示することでしたが、私見のハックです。
とにかく、この問題をどのように解決すべきかについて誰か提案がありますか?
編集済み:生成されたアセンブリは 100% マネージド コードではなく、おそらく C++/CLI で生成されたアセンブリによく見られるように、マネージド コードとアンマネージド コードが混在しているという事実に言及すべきだったと思います...
ubuntu - ライブラリを含めようとしていますが、「未定義の参照」メッセージが引き続き表示されます
libtomath ライブラリを使用しようとしています。Ubuntu Linux のプロジェクトに NetBeans IDE を使用しています。ライブラリをダウンロードしてビルドし、「make install」を実行して、結果の .a ファイルを /usr/lib/ に、.h ファイルを /usr/include に配置しました。
ファイルを適切に見つけているようです (/usr ディレクトリにインストールする前にエラーが発生しなくなったため)。
ただし、mp_init (ライブラリにある) を呼び出す単純なメインを作成すると、プロジェクトを作成しようとすると次のエラーが発生します。
そのため、リンカーはライブラリ内で関数を見つけることができないようですが、そこにはあるので、何が原因なのかわかりません。
gcc コマンドを直接入力して makefile をスキップすると、同じエラーが発生します。静的ライブラリも gcc でコンパイルされていることも確認しました。
追加するために編集:
コンパイルを直接実行し、ライブラリを -l または -L で追加すると、これらと同じエラーが発生します。
私はこのことに非常に慣れていないので、ここで正しいコマンドを使用しているかどうかわかりません. -L の例ではライブラリが見つかりましたか? ライブラリが見つからない場合、どうすればライブラリを見つけることができますか? /usr/lib にあります。現在のディレクトリにある .a ファイルなどで試しました。設定する必要がある環境変数はありますか? もしそうなら、どのように、など。
私は完全に異なるライブラリ(GMP)を試しましたが、まったく同じ問題がありました。これはある種の Ubuntu 環境の問題である必要がありますか? 誰でもこれを修正する方法を知っていますか?
linux - Boost にリンクするときに .a または .so をいつ使用するかを知る方法は?
私が取り組んでいるプロジェクトの Boost::Serialization ライブラリを試してみたかったのです。また、Linux でのプログラミングにも慣れようとしています。デフォルトの場所にブーストを設定しました。ここで提供されているテスト ファイルを、提供されているコマンド ライン引数を使用してコンパイルしてみましたが、問題なく動作しました。この例では、.a ファイルを使用しています。
次にシリアライゼーションのページに行き、シリアライゼーションのデモの 1 つを実行してみました。ファイル名を交換し、libboost_regex.a の代わりに libboost_serialization.a にリンクしたことを除いて、基本的に同じコマンドを実行しましたが、多くのエラーが発生しました。さまざまなオプションを試してディレクトリを再確認した後、.a を .so ファイルに置き換えることで、最終的に機能するようになりました。
参考までに、最終的に私にとってうまくいったのはこれでした:
1 つの例では .a ファイルに対してリンクし、別の例では .so に対してリンクしなければならなかったのはなぜですか?
c++ - 実行可能ファイルと静的ライブラリをリンクするCMakeVisualStudio
Mac OS XとWindowsの両方でビルドしようとしている非常に単純な(現在はmain.cppのみの)CMakeC++プロジェクトがあります。これは、両方のプラットフォームで静的ライブラリとしてコンパイルしたlibgsaslに依存します。
Mac OS Xはビルドに問題はなく、Windowsもビルド中に文句を言わず、EXEを生成します。WindowsでEXEを実行しようとすると、libgsasl.dllが見つからないため、アプリケーションを実行できないというエラーメッセージが表示されます。
ダイナミックライブラリに対してリンクしようとしているのではなく、静的ライブラリ(.libバージョン)だけに対してリンクしようとしています。私は何かが足りないのですか?Visual Studioでは、gsasl.libファイルが見つかり、リンクコマンドに含まれているように見えます。
c - 静的ライブラリに対して共有ライブラリをリンクする: 静的ライブラリは、アプリケーションがリンクする場合とは異なる方法でコンパイルする必要がありますか?
少なくとも Linux と Solaris では、静的ライブラリは実際にはコンパイル済みの .o を 1 つの大きなファイルにまとめたものにすぎません。スタティック ライブラリをコンパイルする場合、通常 -fpic フラグは省略されるため、生成されるコードは位置に依存します。
ここで、静的ライブラリが B であるとします。これをビルドして、結果の .a ファイルを作成しました。これは、位置に依存するすべての .o ファイルの単なるグロブです。今、ビルドしたい共有ライブラリ A があり、B を静的にリンクさせたいと考えています。A をビルドするときは、当然、-fpic フラグを使用して、生成されたコードの位置を独立させます。しかし、B に対してリンクすると、位置依存のオブジェクト ファイルと位置非依存のオブジェクト ファイルが混在していませんか?
-mimpure-text も指定しないと、テキストの再配置エラーが多く発生します。おそらくこれが原因だと思います。ライブラリをコンパイルするとき、共有バージョン、静的バージョン、共有ライブラリで使用できる静的バージョンの3回コンパイルする必要があるようです。私は正しいですか?-mimpure-text を使い続けることもできますが、g++ のマニュアル ページには、そうするとオブジェクトが実際に共有されないことが示されています (すべてが共有されていないのか、それとも静的にリンクされた部分だけなのかは不明ですが、誰か知っていますか?) .
c - バージョン番号を静的ライブラリに保存するには?
バージョン番号を静的ライブラリ (file.a) に保存し、後で Linux でそのバージョンを確認するにはどうすればよいですか?
PSシェルユーティリティのみを使用して、特別な実行可能ファイルを使用せずに、いつでもファイルのバージョンを確認できるようにする必要があります。
c++ - 静的 lib ファイル内のリソース - MFC
リソース識別子が見つからないため、MFC がダイアログ ボックスを起動できないようです。ダイアログ ボックスは別の .lib ファイルにあります (そのため、別の .rc ファイルがあり、私の .exe ファイルのファイルと何らかの形で競合すると思います)。この状況をどのように処理すればよいですか?
iphone - iPhone で CHDataStructures.framework を使用する
私はiPhoneプログラミングが初めてで、プロジェクトでCHDataStructuresを使用しようとしています。しかし、私はいくつかの問題に直面しています:
ダウンロード直後に直接ビルドしようとすると、「Foundation/Foundation.h」というエラーが表示され、そのようなファイルやディレクトリはありません。アクティブな SDK は「Use Base SDK」で、アクティブなアーキテクチャは x86_64 です。Active SDK を iPhone SDK に設定する必要があると思いますが、そこにはリストされていません。
ある時点で (方法は覚えていません)、なんとか微調整して、アクティブな SDK で iPhone SDK (シミュレーター) を取得しましたが、ビルドしようとすると、次のエラーが発生しました:「ターゲットは製品タイプ 'com. apple.product-type.framework」ですが、「iphonesimulator」プラットフォームにはそのような製品タイプはありません";
そして今、私は立ち往生しています。私は何を間違っていますか?
前もってありがとう、ヌーノ
c - Cで静的ライブラリにリンクするには?
code::blocks を使用してスタティック ライブラリをコンパイルします。出力結果は libstatic.a ファイルです。さて、コンパイルされた関数を使用するためにライブラリにリンクするにはどうすればよいでしょうか?
(#include "libstatic.a" を使用しようとしましたが、プロジェクトがコンパイルされません)
iphone - iPhone用の静的ライブラリのコアデータ
CoreDataフレームワークを多用する静的ライブラリを構築しました。外部プロジェクトでライブラリを正常に使用できますが、メインプロジェクトに.xcdatamodelファイルを含めた場合に限ります。ライブラリの目的は実装の詳細を可能な限り隠すことだったので、これは理想的とは言えません。
別の質問で、リソースをライブラリにバンドルできないと通知されました(これは今では完全に理にかなっています)。
では、メインプロジェクトにモデルを含めることなく、プログラムでモデルを「検出」できるようにする方法はありますか?