問題タブ [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.
c - unix ar コマンドでファイル サイズが一致しない
UNIX アーカイブ ファイルの内容を読み取ることができる C プログラムに取り組んでいます。たぶん理解できない興味深いバグがあるので、ここで質問しようと思いました。
アーカイブ c.txt のファイル サイズが 1 つずれているようです。おそらく二重リターンのためです。以下は、nano で開いたときのアーカイブ ファイルの内容です。
ファイルサイズは 17 と表示されていますが、d.txt の前の \n しか表示されません。その結果、ファイル サイズで fseek を使用してファイルのリストをスキャンすると、d.txt でクラッシュすることになります。
以下は C の -t のコードです。これはクラッシュしませんが、d.txt の file_name は \nd.txt になります。
詳細バージョンを作成しようとすると、このバグで本当に行き詰まります。
ファイルの処理に何か問題があるのか 、それとも私が得ていない別のニュアンスがあるのか 疑問に思っています。
c - ファイル IO が正しく読み取られていないようです
免責事項: これは割り当て用です。私は明示的なコードを求めていません。むしろ、自分の問題を理解し、自分で修正できるように、十分な助けを求めるだけです。
ar
宿題に従ってUnix ユーティリティを再作成しようとしています。この割り当ての大部分は C のファイル IO を扱い、他の部分はシステム コールなどを扱います。
この例では、アーカイブ内のすべてのファイルの簡単なリストを作成するつもりです。お気づきかもしれませんが、私は遠くまで行っていません。計画は比較的単純です: アーカイブ ファイルから各ファイル ヘッダーを読み取り、 に保持されている値のみを出力しますar_hdr.ar_name
。ファイルデータを含む残りのフィールドは、別のファイルに到達するまでスキップされfseek()
、その時点でプロセスが再び開始されます。EOF に達すると、関数は単純に終了します。
私はファイル IO の経験がほとんどないため、この割り当てではすでに不利な立場にあります。私は自分の目標を達成するための適切な方法を研究するために最善を尽くしました。そして、自分の能力を最大限に発揮してそれらを実行したと信じています. とはいえ、私の実装には何か問題があるようです。アーカイブ ファイルからのデータは読み取られていないようで、少なくとも変数として保存されているようには見えません。これが私のコードです:
この時点で、データを正しく読み取れるようにしたいだけです。それが終わったら次のファイルを探す作業をします。ただし、明示的なコードを要求しているわけではないことを繰り返したいと思います。このことを学ぶ必要があり、誰かに動作するコードを提供してもらうことはできません。
gcc - 静的ライブラリにリンクする 2 つの方法
arで圧縮されたスタティック ライブラリ(つまり libSOMTEHING.a) の関数を使用する方法をいくつか示します。
ld -Lpath/to/library -lname myapp.o -o 結果
ld path/to/library/libname.a myapp.o -o 結果
違いは何ですか?たとえば、ライブラリ全体が実行可能ファイルにリンクされていますか、それとも必要な関数だけですか? 2 番目の例では、lib とオブジェクト ファイルの場所を切り替えることは重要ですか?
objective-c - iOSライブラリ(Macの場合)からオブジェクトファイルを抽出するにはどうすればよいですか?
私のアプリとシミュレーターでリンクして正常に実行されるサードパーティのiOSライブラリがあります。オブジェクトファイルを独自のコードで再パッケージ化する別のサードパーティソフトウェアと統合するために、オブジェクトファイルを抽出しようとしています。ar
ただし、 ;を使用してオブジェクトファイルを抽出することはできません。「不適切なファイルの種類または形式」というエラーが常に表示されます。
問題のライブラリは、armv7、armv7s、およびi386が含まれているファットライブラリです。Stocklipo
は私のマシンのarmv7について知りませんが、Xcodeは知っています:
私はそれをうまく間引くことができますlipo
:
ただし、間引いた後でも、次のように操作することはできませんar
。
開発ツールがインストールされたOSX10.8.2、Xcode4.6を使用しています。
この厄介なライブラリのために私が取ることができる追加のステップはありますか?
マーティンのコメントに応じて更新
file
は次のことを示しています。
図書館ではないようです!
linux - GNU ar ファイル形式の仕様はどこにありますか?
ar で作成されたファイルにアクセスする必要がありますが、形式を定義する仕様書が見つかりません。誰かが私を正しい方向に向けることができますか?
c++ - (静的ライブラリを使用した g++ コンパイル) への未定義の参照
プロジェクトファイルは次のとおりです。
最初に次の 2 つのコマンド ( pwd source/brain/
)を実行しました。
brain.a
と の両方をにコピーしbrain.hpp
ましたsource/parser/
。次に、このコマンドを実行しました( pwd source/parser
):
そして、私はこのエラーを受け取りました:
ソース ファイル:
私は何をすべきか?
windows - cygwin での LIB と ar の使用の違い
cygwin では、libtool を使用して静的ライブラリをリンクしようとしています。この--mode=link cl.exe
行は、.obj ファイルに対して ar cru を呼び出して、.lib を作成します。ただし、Windows の下に別のプログラム LIB があることは知っています。私が理解している限り、それはarと同等ですが、ar + ranlibとLIBの使用に違いはありますか?また、libtoolにarの代わりにLIBを使用させるにはどうすればよいですか?
c++ - Archiving Two .a files
I have a C++ project that can be compiled with -D UNICODE
.
When I compile it without that Define, it creates a bunch of object files which I then add to a .a archive file using the command: ar.exe rcs Cpplib.a *.o
Then I compile it with that define and archive the objects using: ar.exe rcs CpplibU.a *.o
where the U states that the archive is a Unicode one.
Is there a way I can combine both .a files into ONE archive so that I can link to that instead of having to link to:
Cpplib_x32.a Cpplib_x64.a Cpplib_x32U.a Cpplib_x64U.a
Now I don't mind linking to x32 and x64 separately but having to link to 2 x64's and 2 x32's is kinda annoying.
I want to know if there is a way I can either combine the x32 and x64 archives OR combine the Non-Unicode and Unicode archives. I don't need both. Either, Or.
Any ideas or am I stuck having to link to all 4?
c - make error: Cygwin で 64 ビット GSL をビルドしています
ここから続けて、Cygwin で GCC を使用して 64 ビット GSL をビルドしようとしています。
./configure
(CC=x86_64-w64-mingw32-gcc CFLAGS=-m64 ./configure
)への呼び出しは問題なくmake install
実行されますが、フォルダのロード全体が正常に処理された後、結果への呼び出しは次のようになります。./.libs/libgslsiman.a: シンボルを読み取れませんでした: アーカイブにインデックスがありません。ranlib を実行して追加します
collect2: ld が 1 つの終了ステータスを返しました
Makefile:326: ターゲット `siman_tsp.exe' のレシピが失敗しました
これを引き起こした完全な呼び出しは
siman make 2ですべて作成: ディレクトリ `/cygdrive/f/programming/c/libraries/gslCompiled/gsl-1.15/siman' に入る
/bin/sh ../libtool --tag=CC --mode=link x86_64-w64-mingw32-gcc -m64 -o siman_tsp.exe siman_tsp.o libgslsiman.la ../rng/libgslrng.la ../ieee -utils/libgslieeeutils.la ../err/libgslerr.la ../sys/libgslsys.la ../utils/libutils.la -lm
libtool: リンク: x86_64-w64-mingw32-gcc -m64 -o .libs/siman_tsp.exe siman_tsp.o ./.libs/libgslsiman.a ../rng/.libs/libgslrng.a ../ieee-utils/ .libs/libgslieeeutils.a ../err/.libs/libgslerr.a ../sys/.libs/libgslsys.a ../utils/.libs/libutils.a
hereのアドバイスに従って、ファイル
ranlib
の./siman/.libs
ディレクトリでa を実行することにしました。libgslsiman.a
それがうまくいかなかったので、 への呼び出しを使用して自分でパックしようとしましたar -t libgslsiman.a
。
ただし、これにより同じエラーが発生します。