初めて質問させていただきます。

複数の静的リンクライブラリをまとめて、
一つの静的リンクライブラリを作成できずに困っています。

以下の様な構造のディレクトリがあります。
MAINDIR
├SUBDIR_A
├SUBDIR_B
└SUBDIR_C

まず、それぞれのサブディレクトリ(SUBDIR_A, SUBDIR_B, SUBDIR_C)
で、個別に静的ライブラリ(SUB_A.a, SUB_B.a, SUB_C.a)を
作成しました。コマンドはgccでコンパイル後に"ar rv" です。

最後にMAINDIRで、各サブディレクトリで作った静的ライブラリ
(SUB_A.a, SUB_B.a, SUB_C.a)から一つの静的ライブラリ(MAINLIB.a)
を以下のコマンドで作りました。
ar rv MAINLIB.a SUB_A.a, SUB_B.a, SUB_C.a

しかし、作成したMAINLIB.aから実行ファイルを作ろうとすると、
"ould not read symbols: Archive has no index; run ranlib to add"
というエラーメッセージが出て失敗しました。

複数の静的ライブラリをまとめた一つの共有ライブラリを作れたので、
複数静的ライブラリ→1つの静的ライブラリも作れると思ったのですが。。。
御存知の方がいらっしゃいましたら、お助けください。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

これでどうでしょうか?



% cd MAINDIR
% ( cd SUBDIR_A; ar cr libSUB_A.a *.o; ranlib libSUB_A.a )
% ( cd SUBDIR_B; ar cr libSUB_B.a *.o; ranlib libSUB_B.a )
% ( cd SUBDIR_B; ar cr libSUB_C.a *.o; ranlib libSUB_C.a )

で、これらを1つにまとめるためには、libSUB_A.a、libSUB_B.a、libSUB_C.a をいったん展開しないとだめです。

% mkdir work
% cd work
% ar x ../SUBDIR_A/libSUB_A.a
% ar x ../SUBDIR_B/libSUB_B.a
% ar x ../SUBDIR_C/libSUB_C.a
% ar c ../libMAIN.a *.o; ranlib ../libMAIN.a
% cd ..
% rm -rf work

ただ、複数の静的ライブラリをまとめるようなことはあまりしないと思いますが・・・。

> しかし、作成したMAINLIB.aから実行ファイルを作ろうとすると、
> "ould not read symbols: Archive has no index; run ranlib to add"
> というエラーメッセージが出て失敗しました。

メッセージのとおり ranlib を実行すれば解決するでしょう。

> これは、私のケアレスミスでした。実行ファイル作成時のライブラリのリンク順の問題でした。
> #なぜ、ar実施版だけリックエラーが??という疑問がありますが。。。

共有ライブラリの場合はリンク時に指定する順番を問いませんが、静的ライブラリの場合は順番が重要になります。例えば、libintl は libiconv に依存しますが、どちらも静的ライブラリしかない場合、

○ gcc test.c -lintl -liconv
× gcc test.c -liconv -lintl

となります。(共有ライブラリの場合はどちらでもOK)

> #ld -r -o MAINLIB.o --whole-archive libSUB_A.a libSUB_B.a... --no-whole-archive
> #ar rv libMAINLIB.a MAINLIB.o
> で libMAINLIB.aを作成してみましたが、これだと
> 実行ファイル生成時に、libMAINLIB.a内の関数について"undefined reference"のリンクエラーがでました。

file コマンドや nm コマンドも活用してみてください。
ld -r で作成されたファイルがオブジェクト・ファイルなのか、静的ライブラリなのかは file コマンドで確認できるでしょう。
シンボルが解決できているかは nm コマンドで確認できるでしょう。

参考URL:http://www.linux.or.jp/JM/html/GNU_binutils/man1 …
    • good
    • 0
この回答へのお礼

ご丁寧な回答に感謝します。
お返事遅くなり申し訳ありません。

> これらを1つにまとめるためには、libSUB_A.a、libSUB_B.a、
> libSUB_C.a をいったん展開しないとだめです。
やはり、いったい展開しないとだめなんですね。。。。

> メッセージのとおり ranlib を実行すれば解決するでしょう。
実は、ranlibを行ってもerrorがでてしまうのです。
MAINLIB.aの中身が*.oではなく*.aなので読めないみたいです。
nmコマンドでも、シンボルを読めません。。。

> file コマンドや nm コマンドも活用してみてください。
> ld -r で作成されたファイルがオブジェクト・ファイルなのか、静的> ライブラリなのかは file コマンドで確認できるでしょう。
> シンボルが解決できているかは nm コマンドで確認できるでしょう。
fileコマンドですか!なるほど、ちょっとしらべてみます。ありがとうございます。

お礼日時:2007/10/20 09:10

え~と....


すみません, 期待にそえるとは全く思っていないのですが, とりあえずお約束の質問を 1つ:
環境 (OS, ar, ld などのバージョン) は?
いや, ld でスタティックライブラリを作れる環境がちょっと想像できないので....

この回答への補足

バージョンを確認しましたので、追記させていただきます。

ar: 2.13.90.0.18 20030206
ld: 2.13.90.0.18 20030206
OS: Linux(Fedora Core 6)

でした。

補足日時:2007/10/23 14:53
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
返事がおそくなり申し訳ありません。

すいません。職場の環境ですので、
月曜日にまた追記させていただきます。

ちなみにOSはLinuxです。
ディストリビューションはFedora Core 6です。

お礼日時:2007/10/20 08:50

> arの中では結局ld が走るという事は知りませんでした。



いえ,ar の中で ld が走るんじゃなくて,リンク時に ld が
使用する静的ライブラリが ar 形式なので,ar の中身は ld が
読める *.o ファイルでなければならないということです.


> MAINLIB.a SUB_A.a, SUB_B.a, SUB_C.a

それから,静的ライブラリ XXX の名前は libXXX.a にするのが
慣例です.この形式の名前にしておくと,例えばコンパイル・
オプション -lXXX でライブラリ指定が可能です.
(ライブラリ・ディレクトリの指定が別途必要.)

例:gcc src.c -lXXX …

この回答への補足

下の「ANo.2 回答のお礼」で間違いがありましたので訂正します。


> 実行ファイル生成時に、libMAINLIB.a内の関数について"undefined reference"のリンクエラーがでました。

これは、私のケアレスミスでした。実行ファイル作成時のライブラリのリンク順の問題でした。
#なぜ、ar実施版だけリックエラーが??という疑問がありますが。。。

双方とも、実行ファイルは作成できて動作するようです。
ファイルサイズは違うので前者と後者版のlibMAINLIB.aは、別物なのでしょうが。。。

補足日時:2007/10/17 11:26
    • good
    • 0
この回答へのお礼

ご指摘感謝します。
理解が間違っておりました。

ちょっと実験してみたのですが、以下の様にすると
複数の静的ライブラリから1つのライブラリを作れるようです。

#ld -r -o MAINLIB.a --whole-archive SUB_A.a SUB_B.a... --no-whole-archive

#ライブラリ名の付け方のご指摘を反映させると
#ld -r -o libMAINLIB.a --whole-archive libSUB_A.a libSUB_B.a... --no-whole-archive ですね。

"-r"引数は「ldの入力として指定できる形式で出力する。」
"--whole-archive"引数は「以降に指定する書庫内の*.oをリンクする」
"--no-whole-archive"引数は「以降"--whole-archive"を無効にする」
です。

上記の様に生成したlibMAINLIB.aで実行ファイルが動く事は確認できました。

ただ、1つ気になる点が、
上記で作成したlibMAINLIB.aは静的ライブラリっぽい名前をつけた
オブジェクトの塊だけど、書庫ファイルとは別物では?と思い。

#ld -r -o MAINLIB.o --whole-archive libSUB_A.a libSUB_B.a... --no-whole-archive
#ar rv libMAINLIB.a MAINLIB.o
で libMAINLIB.aを作成してみましたが、これだと
実行ファイル生成時に、libMAINLIB.a内の関数について"undefined reference"のリンクエラーがでました。

ご意見をいただければ、助かります。

お礼日時:2007/10/17 11:13

ar は汎用のアーカイバじゃないのでどんなファイルでも入れられる


わけではありません.いや,入れるだけならできますが,結局
その中身は ld が使うわけだから,その入力となりうるファイル
(事実上 *.o) じゃないと意味がありません.

/usr/lib あたりにたくさん *.a ファイルがあるので,ar tv libXXX.a で
覗いてみればわかると思いますが,*.o ファイルしか入っていないはずです.


> 各サブディレクトリで作った静的ライブラリ
> (SUB_A.a, SUB_B.a, SUB_C.a)から一つの静的ライブラリ(MAINLIB.a)
> を以下のコマンドで作りました。
> ar rv MAINLIB.a SUB_A.a, SUB_B.a, SUB_C.a

SUB_[ABC].a からすべての *.o を取り出して MAINLIB.a に入れなきゃ.

ar xv SUB_A.a
ar xv SUB_B.a
ar xv SUB_C.a
ar rv MAINLIB.a *.o
ranlib MAINLIB.a    # 不要かもしれない.


ar のマニュアル
http://www.linux.or.jp/JM/html/GNU_binutils/man1 …

ranlib のマニュアル
http://www.linux.or.jp/JM/html/GNU_binutils/man1 …

ld のマニュアル
http://www.linux.or.jp/JM/html/GNU_binutils/man1 …
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます。

arの中では結局ld が走るという事は知りませんでした。
この情報を知ることができてよかったです。
確かに*.o以外じゃldの入力になりませんね。納得です。
この観点でもう少し、ar, ldを勉強してみたいと思います。

助かりました。ありがとうございました。

お礼日時:2007/10/17 04:51

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QJDBCとJDBCドライバのライブラリについて

JDBCのライブラリと、DBベンダーのJDBCドライバのライブラリは、
どのような役割分担になっているのでしょうか?

JDBCのライブラリ(ex. java.sql.Connection)は当然使った事がありますが、
DBベンダーのライブラリ(例えば、OracleのOJDBCのライブラリ)は使った事が無いな、、、

と思って質問しました。

Aベストアンサー

>例えば PreparedStatementのexecuteQuery() などは、
>実際にはベンダーのドライバのライブラリ側のメソッドを使っていると言うことですか??
そういうことです。

Q静的/動的リンクライブラリについて

Pythonのctypesを使っていてふと気になったので質問させていただきます。

Cと少々Java、程度の経験しかなかった私にとって、ctypesによって「Cのデータ型を利用できる」「dllをロードして、エクスポートされている関数を使用できる」というのは衝撃でした。
しかし、考えてみれば、仕組みとして理解できなくもない・・・かな?と現在は思っています。

ただ気になったのは、
 ・どうして静的リンクライブラリ(.lib)の方は対応してないの?
ということです。

[質問1]これは原理的に不可能なのでしょうか、それともctypesやPythonの仕様としてできないだけなのでしょうか。
(おそらくは「原理的に不可能」なのだろう、と個人的には思っておりますが・・・。)

以下は私の中の解釈ですが、
・マシン語として実行可能な形式になっているdllは、実行時のリンクの機構さえ整っていれば別にC言語でなくともロードや中身のコードを利用することはできる。
・また、Cのデータ型についても、要は型のバイト数やフォーマット(つまり内部的な扱われ方)をPythonインタプリタが押さえていれば良い話であるから、PythonでCの型を使用することは原理的に可能。

さて、
[質問2]それではlibはどうか。
libもコンパイル済みのものであるなら、Python(またはC以外の言語)からlib内のコードを利用することはできるのではないか?

どちらかのみの回答でも結構です。
また、解釈の誤りについてのご指摘や、リンクライブラリの仕組みを解説したページを教えてくださると助かります。
よろしくお願いします。

Pythonのctypesを使っていてふと気になったので質問させていただきます。

Cと少々Java、程度の経験しかなかった私にとって、ctypesによって「Cのデータ型を利用できる」「dllをロードして、エクスポートされている関数を使用できる」というのは衝撃でした。
しかし、考えてみれば、仕組みとして理解できなくもない・・・かな?と現在は思っています。

ただ気になったのは、
 ・どうして静的リンクライブラリ(.lib)の方は対応してないの?
ということです。

[質問1]これは原理的に不可能なのでしょうか、それ...続きを読む

Aベストアンサー

動的ライブラリは本質的に実行可能プログラムです。一部参照が未解決の場合がありますが、それらはローダで解決できるようになっています。Windows DLLの場合、C形式(cdecl)やC++形式(stdcall)といったエントリポイント形式が決まっているので、メモリにロードしてエントリポイントを適切に呼び出せば使えます。
静的ライブラリは機械語プログラムの断片に過ぎません。変数や関数の参照解決ができていませんので、そのままでは実行できず、リンカと呼ばれる開発ツールによって実行可能プログラムに変換しないと使えません。Python実行環境はリンカを内蔵していないので静的ライブラリを使うことはできません。なお、一般的に静的ライブラリの構造は開発ツールにより異なるので、開発ツールごとに個別のリンカが必要です。
# 例えばVisual C++(.lib)とCygwin gcc(.a)では違う

Q「標準ライブラリ」と、ネット上に配布されているような「ライブラリ」のちがい。

「標準ライブラリ」と、ネット上に配布されているような「ライブラリ」は、全く別のものと考えていいのでしょうか?

通常のライブラリは、ある機能を持ったクラスの集合で、それはJavaのコードで書かれているものがコンパイルされたものだと思います。そういったプログラムは、例えばStringクラス等を使って書かれていると思います。

であるのに、Stringなども、調べると「標準ライブラリ」と出てきます。ライブラリを作るのに、ライブラリがいる?と、少し混乱しているのですが、「標準ライブラリ」というのは、普通のライブラリとは全く別のもの(Javaそのもの)と考えてよいのでしょうか?

よろしくお願いします。

Aベストアンサー

標準ライブラリとは
みんながライブラリを扱えるようにする為の標準語
のような物だと思います。

objectクラスをスーパークラスにもち(自動的にそうなる)、
mainメソッドを持った、
piblicなクラスとして定義されていれば、javaのクラスですから、
Stringなどを使わずに文字リテラルをコーティグすることは可能です。

しかし、ライブラリとしては駄目なものになるでしょう。
なぜなら、Stringクラス以外のインスタンスとして
文字列を実行するとなると、
そのクラスについて知らない人は扱えません。
当然そのクラスを継承して新しいクラスを作っても、
文字列のインスタンスが扱えなくなります。

すべてのスーパークラスはobjectだけです。
しかし、Stringなどの便利な機能を継承していくからこそ、
使い回しがしやすいライブラリになり、
そのおかげで、
簡単にすごいクラスが作れるのだと思います。

実際問題として、標準ライブラリを使用しない、
方言のようなライブラリもありえます。
ある意味で言えば、それが究極のライブラリでしょう。

標準ライブラリとは
みんながライブラリを扱えるようにする為の標準語
のような物だと思います。

objectクラスをスーパークラスにもち(自動的にそうなる)、
mainメソッドを持った、
piblicなクラスとして定義されていれば、javaのクラスですから、
Stringなどを使わずに文字リテラルをコーティグすることは可能です。

しかし、ライブラリとしては駄目なものになるでしょう。
なぜなら、Stringクラス以外のインスタンスとして
文字列を実行するとなると、
そのクラスについて知らない人は扱えませ...続きを読む

Q静的リンクライブラリについて

WindowsのライブラリにDLLやLIBといった形式があり、それぞれ「動的リンクライブラリ」「静的リンクライブラリ」となっていますが、

静的リンクライブラリとしてビルドされたライブラリを、動的に実行プログラムにリンクさせることは(Cやアセンブラなどの)実装次第で可能なのでしょうか?


ビルド時にリンカがやってくれてることを実行時に行えればOK・・・という素直な話ではないのでしょうか。DLLも実行時にGetProcAddress()などを使ってアドレス解決をするわけですし、LIBでも同じことをするのは不可能ではないのでは?と思ったのです。

※動的/静的リンクの概念や具体的な使用方法などはネット上で調べることができましたが、中身にまで踏み込んだ解説をしているページには巡り合えませんでした。そういう具体的な解説のあるページの紹介だけでもとても助かります。また、「根本的に思い違いをしてるんでは?」というご指摘も非常に助かります。
※私自身↑に対する需要はないのでコスト・メリットとかは度外視です。興味本位というやつです。
※別段、Windowsやライブラリの形式にこだわりがあるわけではないですが、これが一番メジャーだろう、ということでWindowsのDLL/LIBを対象に質問させて頂きました。

よろしくお願いします。

WindowsのライブラリにDLLやLIBといった形式があり、それぞれ「動的リンクライブラリ」「静的リンクライブラリ」となっていますが、

静的リンクライブラリとしてビルドされたライブラリを、動的に実行プログラムにリンクさせることは(Cやアセンブラなどの)実装次第で可能なのでしょうか?


ビルド時にリンカがやってくれてることを実行時に行えればOK・・・という素直な話ではないのでしょうか。DLLも実行時にGetProcAddress()などを使ってアドレス解決をするわけですし、LIBでも同じことをするのは不可能ではな...続きを読む

Aベストアンサー

プログラムがリンカの機能を内蔵すれば可能でしょう。同じくコンパイラを内蔵すればCソースコードをリンクして実行することもできます。
ファイルフォーマットは、DLLはEXEと同じでPE(Portable Executable)です。
LIBは、VCだとCOFFフォーマットだと思う。下記参照。
# http://msdn.microsoft.com/en-us/windows/hardware/gg463119.aspx

QUnix上C++でのdllとインポートライブラリの関係

こんにちわ。
いつも教えてgooにお世話になっているorange_pieです。
UNIX上のC++で作成した自作ライブラリをdllにして配布したいのですが、
Unixでの基本的な考え方を教えてください。

(1)Unix上ではDLLの標準的な名称は”libxxxx.so”とするのが普通ですか?
 ※この形式ならLD_LIBRARY_PATH環境変数が検索してくれる。。。
(2)通常、DLLにする場合、インポートライブラリ(.lib)と実際のライブラリ(.so)を作成して、使用する側はインポートライブラリのみをリンクするのでしょうか?
(3)配布されたdllを使う側では、Link時にインポートライブラリをリンクして、関連インクルードファイルをインクルードするだけで使えるのでしょうか?
(4)上記の(2)のように、インポートライブラリとライブラリの実態を作成する為のコンパイルオプションが見つかりません。(ldのmanを見たのですが、意味がわからないと言うか。。。。。)

この質問は、自作ライブラリからlibxxx.soという形のオブジェクトファイルを作り、別プログラムからこのlibxxxをコンパイルオプション(-l)でリンクしてみたら正しく動作したのですが、これでは結局ライブラリの本体が一緒にリンクされている様子で、出来上がった実行形式のファイルサイズが静的ライブラリとしてリンクした時と同じ大きさになっていることに疑問を抱いてしまったものです。
 この状態でも、ライブラリの方だけコンパイルしなおして実行すると
ちゃんとライブラリの変更点は反映されるので問題は無いのですが、
これでもダイナミックリンク・ライブラリと呼べるのでしょうか?

こんにちわ。
いつも教えてgooにお世話になっているorange_pieです。
UNIX上のC++で作成した自作ライブラリをdllにして配布したいのですが、
Unixでの基本的な考え方を教えてください。

(1)Unix上ではDLLの標準的な名称は”libxxxx.so”とするのが普通ですか?
 ※この形式ならLD_LIBRARY_PATH環境変数が検索してくれる。。。
(2)通常、DLLにする場合、インポートライブラリ(.lib)と実際のライブラリ(.so)を作成して、使用する側はインポートライブラリのみをリンクするのでしょうか?
(3)配布されたdll...続きを読む

Aベストアンサー

# すっごく暇ってわけではないんですが :-)

> -Wl,-B,dynamic -lclntsh -ldl -lm -lnsl -lsocket -lrt -lpthread
>
> この中の”-B, dynamic ”の辺りが「ライブラリをダイナミックにリンクするよ」ってことだったのでしょうか?

man ld の -l と -B のところを読めば分かると思いますが、大体、そういうことです。

-B dynamic の場合(普通は、こっちがデフォルト)には -lxxx の指定で libxxx.so
を探して、無ければ、libxxx.a を探します。-B static の場合には libxxx.so を
対象にしません。

参考URLには solaris の AnswerBook を紹介しておきます。


> ということも考慮に入れると、arコマンドで作ったアーカイブもDLLもリンクオプションで-B dynamic とすれば、実行時にリンクできる。(のかな?)

いやいや。静的なライブラリ、っつう位ですから、静的なリンクにしか使え
ません。

.a も .so も「ライブラリ」って名前がつきますけれど、.a はアーカイブファイル
なので、tar の出力ファイルの方に似ています。.so の方は、実行形式のヘッダを
持ち ELF というフォーマットのファイルで実行バイナリの方に似ています。


> で、他人に提供するのにアーカイブとDLLのどちらが適しているかというと、
> 関数などが増えた場合以外はどちらでも同じ(という感じ?なのかな?)

その「他人」の環境次第なんですが、相手の OS やバージョンが特定できないと
静的なアーカイブの方が、利用できる可能性が少し広いです(ソース提供には
遠く及ばないですが)。

> arコマンドは、複数のオブジェクト(.o)を追加することで作成しなおすことができるが、DLLはライブラリ構成プログラムをリコンパイルする必要がある。

リコンパイルではなく、再リンクです。


後、共有ライブラリの場合には、あまり小さく刻んでしまうとロードの時間が
気になり出すので、ひとつのファイルの単位をどうするかを悩むときがあり
ます。


最後に、No.2 の回答にあるように unix をひと括りにして、.so が普通、と
言うのは、ちょっと大雑把すぎました。他の質問のことが頭にあったもので
orange_pie さんが使っている環境を暗に想定してました。

十年くらいさかのぼっただけで共有ライブラリが扱えない unix なんてのは、
ごろごろしてましたし。

参考URL:http://docs.sun.com:80/ab2/coll.153.4/REFMAN1/@Ab2PageView/116238?Ab2Lang=ja&Ab2Enc=shift_jis

# すっごく暇ってわけではないんですが :-)

> -Wl,-B,dynamic -lclntsh -ldl -lm -lnsl -lsocket -lrt -lpthread
>
> この中の”-B, dynamic ”の辺りが「ライブラリをダイナミックにリンクするよ」ってことだったのでしょうか?

man ld の -l と -B のところを読めば分かると思いますが、大体、そういうことです。

-B dynamic の場合(普通は、こっちがデフォルト)には -lxxx の指定で libxxx.so
を探して、無ければ、libxxx.a を探します。-B static の場合には libxxx.so を
対象にしません。...続きを読む

QArduinoでのライブラリファイル生成方法

Arduinoで.aファイルまたは.dllファイルのライブラリを生成&使用したいのですが、
Arduino IDEではライブラリファイルの生成が出来ないように思われます。

Arduinoで使用可能な.a / .dllファイルの生成方法を教えて頂けると助かります !!
(Atmel Studioを用いることで可能なのでしょうか?)

またArduino IDEにおいて、ライブラリ使用方法も合わせてご教授願いたいです。

Aベストアンサー

Arduino IDEは使っていないので知りませんが、Atmel Studioなら.aファイルは作成できます。
Arduino自体がGNUのC++で作られていますから、利用可能なライブラリの作成は問題ないと思います。

Q至急!!iTunesライブラリデータ復元方法を!

!iTunes ライブラリのデータが全部消えました!NAS内にデータは全て残っています。ライブラリを元の状態に復元するにはどうすればいいですか?!
iTunesライブラリを元のライブラリの状態に戻すにはどうすればよいですか?
至急お願いします!!

iPhone2台を同じPCで管理したく、知恵袋で質問し、答えて頂いた手順どうりに、
以下のようにiTunesライブラリを作成しました。

3.iTnesの編集→設定→共有で共有したい項目にチェック
4.iTunesを一旦終了します。
5.itunesを起動します。すかさず、ShiftKeyを押し続けます。
6.「終了」 「ライブラリを選択」「ライブラリを作成」がでます。
7.「ライブラリを作成」を選んで「itunes iPoneB」などとはっきり識別できる名前をつけます。


すると、古いiPhoneをつないだところ、今作成し終了したはずの新しい名前のiTunesライブラリが起動されて、
今まで保存していたミュージックデータなどが全て消えていました。
今まではライブラリの名前はデフォルトのままで、保存先のみ、外付けHDD、というか外付けNASの中に保存していました。

確認すると、保存していたデータ(音楽データなど)は、残っていました。NAS上の、Musicフォルダ内でも全部確認しましたが、何も消えていません。

仕方なく、もう一度iTunesをShiftキーを押しながら開き、”iTunesライブラリを選択”で、”既存のライブラリを選択するか、新しいライブラリを作成してください”と聞かれるので、
”ライブラリを選択”を押し、先ほど新たに作ったライブラリではなく、前のライブラリを開こうとし、NASのMusicフォルダから何か開こうとすると、”検索条件に一致する項目はありません”となり、開くことができません!

どうすれば元のライブラリの状態に復元できますか?
アップルのサポートサイトなども調べましたが、どれもあてはまりませんでした。
使用PCはWindow Vistaです。

!iTunes ライブラリのデータが全部消えました!NAS内にデータは全て残っています。ライブラリを元の状態に復元するにはどうすればいいですか?!
iTunesライブラリを元のライブラリの状態に戻すにはどうすればよいですか?
至急お願いします!!

iPhone2台を同じPCで管理したく、知恵袋で質問し、答えて頂いた手順どうりに、
以下のようにiTunesライブラリを作成しました。

3.iTnesの編集→設定→共有で共有したい項目にチェック
4.iTunesを一旦終了します。
5.itunesを起動します。すかさず、ShiftKeyを...続きを読む

Aベストアンサー

ハッキリした事は言えませんが、恐らく「iTunes Library.itl」に新しい情報が
書きこまれた為の不具合では?と思います。
iTunesライブラリフォルダに有る「iTunes Library.itl」を作り直して見て下さい。
恐らく、新しく作ったライブラリ「iTunes Library.itl、iTunes Music Library.xml」
が新しい名前と共に有り、新しい「iTunes Library.itl、iTunes Music Library.xml」
と古い「iTunes Library.itl、iTunes Music Library.xml」が混在していると思います。
新しく作った方のライブラリを削除し、古い「iTunes Library.itl」を
作り直して見て下さい。
古い元の「iTunes Music Library.xml」が有れば作れます。
XMLファイルなのでテキストアプリなどで開いて見れば、iTunesの曲の情報リストが
見えると思います。リストが有れば「itl」ファイルは作れます。
また、編集→設定→詳細設定でiTunesメディアフォルダの場所の確認をしておいて下さい。
デフォルトに戻ってる可能性も有ります。

※)ライブラリおよびプレイリストを作成し直す方法
→http://support.apple.com/kb/HT1451?viewlocale=ja_JP

元に戻ったら、もう一度コチラを参考にライブラリファイルを作って見て下さい。
>新しい名前のiTunesライブラリが起動されて、今まで保存していたミュージックデータなどが全て消えていました。
これは正常な動作で、新規でライブラリに曲を入れ、リストを作っていきます。
ライブラリに追加する時は「編集→設定→詳細設定」で
「ライブラリの追加時に・・・フォルダにコピーする」のチェックを外して下さい。
でないと新しいライブラリ下に曲のファイルのコピーが出来てしまいます。
※)1 台のコンピュータで複数の iPod、iPad、または iPhone を利用する方法
手順3を参照
→http://support.apple.com/kb/HT1495?viewlocale=ja_JP

ハッキリした事は言えませんが、恐らく「iTunes Library.itl」に新しい情報が
書きこまれた為の不具合では?と思います。
iTunesライブラリフォルダに有る「iTunes Library.itl」を作り直して見て下さい。
恐らく、新しく作ったライブラリ「iTunes Library.itl、iTunes Music Library.xml」
が新しい名前と共に有り、新しい「iTunes Library.itl、iTunes Music Library.xml」
と古い「iTunes Library.itl、iTunes Music Library.xml」が混在していると思います。
新しく作った方のライブラリを削除し、古い「iTune...続きを読む

QObj-Cで生成元のViewへ文字列を表示させたい

iOS SDK(Objective-C)を勉強中なのですが、あるView(TestViewController.view)から別のView(ButtonViewController.view)を表示し、表示したViewにあるボタンを押した時に、生成元のView(TestViewController.view)のラベル(test_label)に文字列を表示したいのですが、色々やってみたものの上手く行かず、どの用に実装するのが正しいのか行き詰まってしまいました。どなたか手助けよろしくお願いします。


//*** TestViewController.h
#import <UIKit/UIKit.h>
#import "ButtonViewController.h"
@interface TestViewController : UIViewController {
IBOutlet UILabel *test_label;
ButtonViewController *buttonViewController;
}
- (IBAction) pushButton:(id)sender;
@end

//*** TestViewController.m
#import "TestViewController.h"

@implementation TestViewController

- (void)viewDidLoad {
[super viewDidLoad];
test_label.text = @"Push Button";
}

//ButtonViewを表示
- (IBAction) pushButton:(id)sender {
buttonViewController = [[ButtonViewController alloc] initWithNibName:@"ButtonView" bundle:nil];
[self.view addSubview:buttonViewController.view];
}

- (void)dealloc {
[buttonViewController release];
[super dealloc];
}
@end



//*** ButtonViewController.h
#import <UIKit/UIKit.h>
@interface ButtonViewController : UIViewController {
}
- (IBAction) pushButtonSub:(id)sender;
@end

//*** ButtonViewController.m
#import "ButtonViewController.h"

@implementation ButtonViewController
- (void)viewDidLoad {
[super viewDidLoad];
}

- (IBAction) pushButtonSub:(id)sender {
// ??? ← このボタンを押したときにtest_labelへ表示させたい
}

- (void)dealloc {
[super dealloc];
}
@end

iOS SDK(Objective-C)を勉強中なのですが、あるView(TestViewController.view)から別のView(ButtonViewController.view)を表示し、表示したViewにあるボタンを押した時に、生成元のView(TestViewController.view)のラベル(test_label)に文字列を表示したいのですが、色々やってみたものの上手く行かず、どの用に実装するのが正しいのか行き詰まってしまいました。どなたか手助けよろしくお願いします。


//*** TestViewController.h
#import <UIKit/UIKit.h>
#import "ButtonViewController.h"
@interface TestVi...続きを読む

Aベストアンサー

> //*** ButtonViewController.h
> @interface ButtonViewController : UIViewController {
> UIViewController *superviewController;
> }
> @property (nonatomic, retain) UIViewController *superviewController;
> - (IBAction) pushButtonSub:(id)sender;

「UIViewController *superviewController;」ではなく、「TestViewController *superviewController;」としてください。
UIViewControllerにはとうぜん「test_label」というプロパティがありませんから、コンパイラはそれを構造体と認識し、「request for member 'test_label' in something not a structure or union」というエラーメッセージを出します。TestViewControllerなら、test_labelというプロパティがあるので、エラーになりません。
しかし、これだとTestViewController.hをimportしていないので、「その型は理解できない」というエラーが出ます。そしてヘッダファイルで「#import "TestViewController.h”と宣言すると、別の問題が起きます。回答No.3で課題とした問題です。
そこでButtonViewController.hのヘッダファイルには、「@class TestViewController」という前方宣言を記述しておきます。
「前方宣言」は、C言語の用語ではなく、Objective-Cの用語です。お手持ちのObjective-C、iPhone SDKの参考書でお調べください。(説明がないかもしれませんが……)

※プロパティはObjective-C 2.0で追加された文法ですが、ドットでつなぐ記述法に批判が出ました。構造体の要素を記述するのと、区別ができない(しにくい)ではないか?というのが、批判の骨子です。じっさい不備な記述だと、コンパイラも区別ができなくて、混乱するので、問題なしとはいえないようです。

> //*** ButtonViewController.h
> @interface ButtonViewController : UIViewController {
> UIViewController *superviewController;
> }
> @property (nonatomic, retain) UIViewController *superviewController;
> - (IBAction) pushButtonSub:(id)sender;

「UIViewController *superviewController;」ではなく、「TestViewController *superviewController;」としてください。
UIViewControllerにはとうぜん「test_label」というプロパティがありませんから、コンパイラはそれを構造体と認識し、「re...続きを読む

QMedia Player 11 のライブラリについて

今MP11を使ってるんですけど、
ライブラリに勝手に曲が追加されていってしまいウザイです。

1度ライブラリを全部削除したんですけど、そしたら次の起動時に
勝手にライブラリ構成しはじめちゃったみたいで
スゲー重くなりました(><)

ライブラリを自動で構成する機能を止めたいです。
あと、曲再生してもライブラリに追加しないでほしいです。

そういった設定ってできるのでしょうか?

Aベストアンサー

#1です。すみません、補足します。

先ほどのNo.1は「曲再生してもライブラリに追加しない」方法
自動構成する機能を止めるには
1.ライブラリの▼をクリックし、「その他のオプション」を選択
2.「フォルダの監視」をクリックし、監視するファイルを「無視」または「削除」を選択し、OKをクリックしてとじる

いずれも「ヘルプ」に記載されていますのであわせてご参照ください。

Q1つのリンクのクリックで複数のページを変える

4つに分けたフレームでのサイトを作成しています。
そのうちの1つにリンクコマンドを張り、2つのフレームの内容を同時に変化させることなどできるでしょうか。

説明も足りず、良い例になるようなものもなく、申し訳ありませんが、どなたか教えてはいただけないでしょうか。
不可能であれば他の方法も考えなければならないと思っています。
どうかよろしくお願いします(T^T)

Aベストアンサー

1.html と 2.htmlを表示するindex.htmlというフレームセットと
3.htmlと4.htmlを表示するsecond.htmlというフレームセットを作り
targeto="_top" を指定してsecond.htmlにリンクすれば、3と4が表示されます。

index.html
<frameset rows="50%,1*">
<frame src="1.html">
<frame src="2.html">
</frameset>

2.htmlの中で記述
<a href="second.html" target="_top">セカンド</a>

second.html
<frameset rows="50%,1*">
<frame src="3.html">
<frame src="4.html">
</frameset>

JavaScript不要ですが
そのかわりフレームセットをページ数分だけ作らないと行けないので大変。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング