問題タブ [unix-ar]
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.
static-linking - MinGW-w64 の ar.exe は、静的ライブラリをビルドしようとするとライブラリを見つけることができません
主にGCCバージョンが新しいため、数日間MinGW-w64をシステムで動作させようとしていますが、設定が間違っているか、MinGW-w64自体に奇妙な問題があります。
i686-w64-mingw32-gcc-4.7.2-release-win32_rubenvb をダウンロードし、解凍して $PATH 環境変数C:/Dev/mingw-ruben
にパスを追加しました。C:/Dev/mingw-ruben/bin
私が構築しようとしているのは、CMake ファイルに付属するSFML 2です。CMake を実行すると問題なく動作し、コンパイラが認識され、すべてのテストに合格します。CMake はar.exe
、C:/Dev/mingw-ruben/bin
フォルダー内の も検索します。MinGW Makefile を生成した後、Windows コマンド ラインに切り替えてmingw32-make install
. 問題が発生する場所があります。エラーが発生します。
またはネットワークライブラリの場合
エラーは非常に明白なようで、チェックすると実際には nolibopengl32.a
またはlibws2_32.a
inがありませんmingw-ruben/lib/
が、ファイルは実際には にありますC:/Dev/mingw-ruben/i686-w64-mingw32/lib
。
では、ar/make/cmake に、mingw-ruben/lib
ディレクトリだけでなく、mingw-ruben/i686-w64-mingw32/lib
.
すべてのコンテンツをi686-w64-mingw32
サブフォルダーからmingw-ruben
ルート フォルダーにコピーすることをお勧めしますか?
余談ですが、もう一度呼び出すことはできますmingw32-make install
が、手順は続行されますが、アプリケーションを SFML にリンクしようとすると、glXYZ
SFML 内の関数に対して多くの未解決のシンボル エラーが発生します。
詳細情報: Windows 8 x64 を使用していますが、それは問題ではないと思います。はい、MSYS を試しましたが、問題は解決しません。
私は何か間違ったことをしていますか?特別に構成する必要がありますか?
c++ - 2 つの静的ライブラリをマージしようとしています
コードを頻繁に使用するため、コードの静的ライブラリが必要であるという問題があります。それは c++ です (それ以外の場合は、共有が別の選択肢になります)。しかし、そのコードは他の静的ライブラリに依存しています。そのため、静的ライブラリを他のライブラリにリンクできないようになりました。How to merge two "ar" static libraries into oneを見つけました。そのため、テストを試みましたが、うまくいかず、その理由と正しい方法を知りたいです。
それぞれにヘッダー(リンクされていませんが実装用)と単純な関数を持つそのソースが何かを返す2つの静的ライブラリがあります。lib1 には関数があり、lib2 には lib1 に依存する関数があり、lib1 と lib2 をリンクすると、実行可能ファイル 3.exe がリンク エラーになります。lib1 の関数は参照されません。リンクの内容を使用して、ライブラリのすべてのオブジェクトを抽出し、それを出力ライブラリにすばやく追加するバッチスクリプトを自分で作成しました。
script.bat libtest1.a libtest2.a
その出力は信頼できるように見えます:
lib1 と lib2 の代わりに、出力にリンクしましたが、それでも lib1 の関数は参照されません。
じゃあ何をすればいいの ?コード全体を常に含めたくありません。
c - C でのファイルの読み取り/書き込み
基本的に、指定されたファイル名のリストのアーカイブ ファイルを作成するプログラムを C で作成しています。ar
これは、Linuxのコマンドにかなり似ています。アーカイブ ファイルは次のようになります。
しかし、アーカイブからファイルを抽出するのに苦労しています。ユーザーが抽出したいとしましょうfile1.txt
。ファイル名(この場合は file1.txt)のインデックス/場所を取得し、 58 文字をスキップしてファイルのコンテンツに到達し、コンテンツを読み取り、新しいファイルに書き込む必要があります。だからここに私の質問があります:
1) アーカイブ ファイル内のファイル名のインデックス/場所を取得するにはどうすればよいですか? 重複するファイル名は許可されていないことに注意してください。したがって、2 つの異なるインデックスを持つことを心配する必要はありません。
2) ファイルを読み取るときに、どうすれば複数の文字 (この場合は 58) をスキップできますか?
3) ファイルの内容がいつ終了するかを知るにはどうすればよいですか? file2.txt/
つまり、コンテンツを読み取ってヘッダーの直前で停止する必要があります。
autotools - Autotools: さまざまにコンパイルされたソースから静的ライブラリを作成する
複数のソースから静的ライブラリを構築しようとしています。問題は、一部のソースでは異なるCFLAGS
.
最初は何個か作ろうと思っていたのですがnoinst_LIBRARIES
、最終的にはlib_LIBRARIES
を使って一つにまとめましたLIBADD
。ar
静的ライブラリを抽出せずに使用して結合する方法がないため、このアプローチは失敗します。
これは私のMakefile.am
現在の様子です:
最初にライブラリを抽出しAR
てから. しかし、私はこのアプローチが好きではないので、これを達成する正しい方法はありますか?ar
final.a
x86 - Windows で GHC エラー「不明な PEi386 セクション名 `.idata$4'」を解決するには?
最近、Windows で HDBC-postgresql をコンパイルするために書いた手順が、Haskell Platform 2012.2.0.0 では機能しないことがわかりました。ライブラリは正常にビルドされますが、ビルドされたライブラリをリンクしようとすると、次のcabal
エラーで失敗します。
で作り直しlibpq.a
ましdlltool --no-idata4 --no-idata5
たが、エラーメッセージが に変わりましたUnknown PEi386 section name `.idata$7'
。
これはGHC バグ 7103のようです。
PE および COFF 仕様によると、ドル記号はセクション名に含まれる場合に特別な意味を持ち、「グループ化されたセクション」を示します。リンカは、「$」とそれに続くすべての文字を破棄して、マージされた.idata
セクションを作成することになっています。「$」に続く文字は、マージされたセクションへの貢献の順序を決定するために使用されます。
dlltool
グループ化されたセクションを強制的に出力しないようにする方法はありますか?
あるいは、GNU アーカイブ (A ファイル) を取得し、グループ化されたすべてのセクションをマージして、マージされたインポート ライブラリ (implib) を出力する方法はありますか?
編集: Haskell Platform 2012.4.0.0 でも同じエラーが発生します。
EDIT2のソースコードをdlltool
見た後、グループ化されたセクションを出力しないようにする方法はないようです。また、オブジェクト ファイル内のグループ化されたセクションをマージする既製のユーティリティも見つかりませんでした。
報奨金とこの質問のために、次のように変更します:.idata
モジュール定義 (DEF) ファイルを指定して単一のセクションを作成する方法。
gcc - ldおよびarコマンドと重複するメモリ
このコマンドでいくつかのテキストファイルをリンクしました:
ld -r -b binary -o resources1.o * .txt
そして、私はこのコンテンツを含むファイルresources.oを取得します:
nmリソース1.o
別のldコマンドから来る他のresources2.oファイルがありますが、内容が異なります。
2つのresources.oファイルを1つのlibSum.aファイルに結合したいと思います。だから私はこのコマンドを使用します:
ar rvs libSum.a resources1.o resources2.o
libSum.aをCプログラムにリンクしてそれらのテキストを使おうとすると、同じメモリオフセットを共有しているために使用できません。したがって、バイナリ__textos1_texto1_txt_startは、_binary_texto4_txt_start(0X00000000)と同じ方向になります。
両方のリソースファイルを1つの.alibに結合して、メモリオフセットの重複を回避するにはどうすればよいですか?ありがとう
cmake - Beagleboardでのコンパイル-ARで失敗
Beagleboard-Xm、カーネルでコンパイルしています:
私は今、CMakeを使用して静的ライブラリをコンパイルしようとしていますが、ライブラリのリンクに関しては、すべてが正常に機能しています。
私の場合、「ar--help」は同じものを出力します。
ボード上でリンクを実行する方法はありますか?問題は何ですか?
他のいくつかのシステムバージョン:
c - リンカー スクリプトでのアーカイブ ファイルの抽出
次のような問題に対処しようとしています。
以下から作成されたライブラリ libxyz.a があるとします。
以下を使用してコンパイルおよびアーカイブ:
abc.o を期待される場所に正確に配置するには、リンカー スクリプトをどのように作成する必要がありますか?
私はそのような方法でそれを処理しようとしていました:
しかし、実行後:
私は得る:
フォーラムのリンカー ファイルでアーカイブを抽出する例は見つかりませんでした。私が見つけた唯一のものは、構造に関する情報のみを含むリンカのドキュメントでしたarchive:file
。
android - Android:静的ライブラリを1つにマージ
Android NDK r8を使用して、include $(BUILD_STATIC_LIBRARY)を使用して複数の静的ライブラリを生成すると、lib1.a、lib2.a、lib3.aなどが正常に取得されます。
次に、これらの静的ライブラリを1つにマージします。
私はAndroidNDKのar.exeでそれをやってみます:
しかし、libAll.aをAndroid NDK makefileに使用すると、インデックスがないと表示されません。
このインデックスを追加するにはどうすればよいですか?
その他の質問 :
アーカイブlibAll.aの内容を表示すると、これらのライブラリの.o記号の代わりに、 lib1.a、lib2.a、lib3.aが表示されます。
どうすればそれを変更できますか(=静的ライブラリから.oを抽出してlibAll.aにマージします)?
ありがとう
c - fwriteを使用してar_hdr構造体をファイルに保存する
私はunixarの独自のCバージョンを作成するための問題に取り組んでいます。現在、ヘッダーを作成してファイルに書き込もうとしています。
最初は、stat構造体を使用し、fprintfを使用してコンテンツを印刷しました。しかし、そのような方法で印刷されたファイルにarコマンドを使用しようとすると、機能しません。より良い解決策は、fwriteを使用して構造体をファイルに直接書き込むことであると言われました。だから私は今それを実装しようとしています。
ar_hdr構造体に統計情報を入力してからfwriteしようとしましたが、ファイルに書き込むとガベージが発生します。
アップデート2:@fvuの推奨に基づいてfprintfのみを使用します。fprintfの最後の項目は、ar.hからの定数ARFMAGであり、2文字を印刷するのと同じだと思います。
私のプログラムのテスト出力は次のようになりました。
UNIXコマンドを試すと:ar -tv myfile.a
結果は次のとおりです。不適切なファイルタイプまたは形式
nanoを使用してtest.aを確認すると、これが結果になります
最初のヘッダーの前に奇妙なshift@記号があります。これがファイルヘッダー全体を書くための私のコードです。ヒントをいただければ幸いです。
od-xファイルからの結果の追加| ヘッド-n2: