問題タブ [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.

0 投票する
1 に答える
177 参照

c++ - ライブラリC++を含む問題

対応するヘッダーファイルを含む非常に単純なC++ファイルMultiplier.cppがあり、そこから次のコマンドを使用してライブラリを作成しました。

新しいディレクトリに、クラスCalculator.cppを使用する(対応するヘッダーファイルを含む)を作成しました。MultiplierヘッダーファイルCalculator.hには、対応する`#include"Multiplier.h"があります

ヘッダーファイルCalculator.hには対応するものがあります#include "Multiplier.h"

作成したライブラリをこのディレクトリにコピーしCalculator.cpp、次のコマンドを使用してコンパイルしようとしました。

これは私にこれらのエラーを与えます:

私は長い間検索しましたが、何が起こっているのか理解できません。GCC4.2.1を使用しています。

0 投票する
1 に答える
14257 参照

macos - Mac OSで静的ライブラリのコンテンツを監視する方法は?

xCodeで静的ライブラリプロジェクトを作成し、mylib.aという名前の.aをビルドします。静的ライブラリnylib.aに通知するためのいくつかのコード( .mファイル)とcommon.aという名前の別の静的libファイルがあります。しかし、common.aの競合がmylib.aにパックされているかどうかは疑問です。では、Mac OSでmylib.aのコンテンツを監視するにはどうすればよいですか?Linuxでこのタスクを完了するためのar、nmなどのコマンドがあることは知っていました。ただし、MacOSでは動作しません。

0 投票する
2 に答える
2526 参照

gcc - .cファイルなしで静的ライブラリを作成することは許可されていませんか?

2つのファイル->fact.hとフォルダmain.cがあります。の関数を呼び出すmain関数があります。arコマンドでアーカイブを作成しています->/home/snyp1/newmain.cfact(int x)fact.h.a

私はubuntu12.04にいます。何が悪いのか教えてください。(また、私がを使用しない場合-L/.../new、gccは「lfact」を見つけることができないと言います。おそらくそれがないためです/usr/local/lib

編集:OK私は原因を見つけました。fact.hこれは、をビルドfact.oしてライブラリに配置するために使用していたため、期待どおりに機能していませんでした。だから私は今それをに変更しfile.c、今はうまく働いています。その情報を提供するべきだった、ごめんなさい。なぜこのような問題が発生するのかはわかりませんが。少なくとも1つの.cファイルがなくてもライブラリを作成することはできませんか?

0 投票する
2 に答える
2725 参照

gcc - 静的ライブラリ内のオブジェクトの順序

必要なすべてのシンボルを見つけるために特定の順序でリンクする必要があるいくつかのオブジェクト ファイルを使用する C プロジェクトがあります。

たとえば、このコマンドは正常に機能します (lib2.o は lib1.o に依存するなど)。

しかし

`my_variable' エラーへの未定義の参照で終了します。

これは既知の動作であり、たとえばこれらのオブジェクトをリンカー スクリプトの GROUP セクションに追加することで解決できます。

これらのオブジェクトをスタティック ライブラリとして同僚と共有したいと思います。そう...

残念ながら、これにより、オブジェクトを間違った順序で指定するなど、同じ未定義の参照エラーが発生します。

この問題が比較的一般的であると思われる場合でも、それを機能させるためのリンカまたはアーカイバのオプションは見つかりませんでした。また、グーグルによる解決策もありません。

誰か解決策を教えてください。

よろしく1月

0 投票する
1 に答える
2215 参照

c++ - g ++静的ライブラリの作成:シンボルを読み取ることができませんでしたアーカイブにインデックスがありません

g++を使用してC++用の静的ライブラリにいくつかのSDLユーティリティクラスをグループ化しようとしています。私はubuntulinux11.10とgccversión4.6.1(Ubuntu / Linaro 4.6.1-9ubuntu3)を使用しています。arのバージョンは2.21.53.20110810です。

すべてのファイルが小さいので、私は現在ヘッダーファイルのみを使用しています。それが問題と関係がある場合に備えて、私はこれに言及しています。また、ほとんどのヘッダーは-lSDLを使用してオブジェクトコードにコンパイルされます(それが正しいか、関連性があるかどうかはわかりませんが、どちらの方法でも失敗します)。最後に、2つの異なるクラスの静的メンバーがいくつかあり、プロセスの最後のステップに含まれるように独自のファイルで定義されています(ODRに従うことを試みます)。

つまり、すべてのファイルがオブジェクトコードに正常にコンパイルされ、arを使用してアーカイブが作成されますが、メインファイルをコンパイルして、次のように新しいライブラリ(libDanGfx.aである私が作成しているアーカイブ)にリンクしようとすると、次のようになります。

g ++ -Wall -ansi -pedanticnewmain.cpp-L。-lSDL -lDanGfx

このエラーが発生します:

./libDanGfx.a:シンボルを読み取れませんでした:アーカイブにインデックスがありません。ranlibを実行して1つ追加します

これは、すべてのアーカイブとオブジェクトコードを削除した後でも発生します。

私はサイトを偵察しましたが、問題に対する答えはまだ見つかりませんでした。ranlibを使用してもまったく役に立ちませんでした。また、-m32をコンパイラにフィードしようとしましたが、それでも役に立ちませんでした。私は3つの異なるマシンで試しましたが、すべて失敗しました。

フランキー、私はこのアーカイブ全体を削除し、makefileを更新して、オブジェクトファイルとリンクすることを考えていますが、ここで何が起こっているのかを知り、その過程で少し学びたいと思っています。

多くの情報が欠落していると思われるので、念のため、すべてを含む.tar.gzファイルをアップロードしました(解凍してmakefileを試してください)。熟読するために、すべての.oファイルはobjectsディレクトリにあり、使用されるすべてのコマンドはmakefileで読み取ることができます。また、メインは画面にいくつかの無意味なものを表示する必要があります(スペースを節約するためにリソースファイルがアップロードされていないため、おそらく赤い四角です。もちろん、.oファイルと.aファイルも除外されます)。

このリンクからファイルにアクセスできます。

0 投票する
1 に答える
638 参照

c - Snow Leopard のシン アーカイブへのリンク

2 つのアーカイブ ライブラリを組み合わせたシン アーカイブを C プログラムにリンクしようとしています。

2 つの単純な hello world 関数を作成し、次のコマンドを使用してアーカイブを作成しました。

2 つのアーカイブは、シン アーカイブを使用してマージされます。

そしてgccでコンパイル:

次のようなエラーメッセージが表示されます。

ld: 警告: ファイル all_lib.a を無視します。ファイルは、リンクされているアーキテクチャではない、サポートされていないファイル形式用にビルドされました (x86_64)

アーキテクチャ x86_64 の未定義シンボル: 「_func1」、参照元: main.o の _main 「_func2」、参照元: main.o ld の _main: アーキテクチャ x86_64 のシンボルが見つかりません

main.o を lib1.a および lib2.a に直接リンクしようとすると、すべてが機能します。

Mac OSX 10.6.8 で gcc (MacPorts gcc46 4.6.3_3) 4.6.3 と GNU ar (GNU Binutils) 2.21 を使用しています。


Makefile

main.c

lib1.h

lib2.h

lib1.c

lib2.c

0 投票する
1 に答える
4772 参照

c++ - 静的ライブラリを作成するためのリンクライブラリ

私はLib_file.hとLib_file.cppにいくつかのコードを書きました。このコードを静的ライブラリに変換したいと思います。(コマンドを使用して)コードをコンパイルしてg++ -I <necessary include files> -o Lib_file.o Lib_file.cppLib_file.oを取得できます。コマンドを使用してアーカイブに追加することもできar rvs Lib_file.a Lib_file.oます。-Lオプションを使用して他のコードでこのライブラリを使用しようとすると、未定義の参照エラーが発生します。このエラーは、私のLib_file.oのコードを示しています。だから私の質問は、Lib_file.cppのコードを取得して、それが使用するライブラリにリンクする方法です。

私はこれまでに次のオプションを試しました

I. Lib_file.oを作成した後、次のコマンドを試しました g++ -L<include path> -l<.a files> Lib_file.o。このコマンドを実行すると、次のエラーが発生します

II。arコマンドを使用して、必要なすべての.aファイルをLib_file.oとともに新しいアーカイブに含めようとしました。それでも、アプリケーションでLib_file.aライブラリを使用しようとすると、未定義の参照エラーが発生します

ここで私を助けてください

0 投票する
7 に答える
23612 参照

java - LOCAL_SRC_FILES が不足しているファイルを指している

私は拡張現実プログラムをやっています。私はこのプロジェクトを手渡され、cygwin と android プログラミングは初めてです。cpp ファイルの 1 つをコンパイルするには、cygwin を使用する必要があります。ただし、cygwin で ndk-build を実行すると、次のエラーが発生します。

これは私の android.mk コードです:

私はプログラミングのプロではないので、いくつかのガイダンスが必要です。

0 投票する
1 に答える
269 参照

linux - アーカイブのアーカイブ

重複の可能性:
2 つの「ar」静的ライブラリを 1 つにマージする方法

以下のように複数のアーカイブファイルがあります

これらのライブラリにはすべて obj ファイルがたくさんあります。

これらすべてのライブラリの 1 つのアーカイブを作成したいと考えています。

しかし、それは機能しません。これらの .a ファイルをすべて抽出する必要があると表示され、これらの obj ファイルをすべて取得したら、以下のように実行できます。

しかし、私はこの厄介なことをすべてやりたくありません。次のような明確な解決策が必要です

この例で示したフォルダー構造はそれほど単純ではないため、これに似たソリューションが必要です。

どんな助けでもいただければ幸いです

0 投票する
3 に答える
117 参照

c++ - ar を介してリンクした後に特殊なメンバー関数が失われる

はるかに大きなプロジェクトで問題を再現する次の最小限の例を検討してください。

スペック.h:

その他.cpp:

spec.cpp:

コンパイル:

質問:

なぜこうなった?なんとなく剥がれている?lib.a と直接オブジェクト ファイルの使用の違いは何ですか? :-)

ありがとう!