問題タブ [darwin]
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++ - 共有ライブラリまたは dylib で未定義のシンボルを処理するにはどうすればよいですか?
Darwin に移植する Linux 用の Makefile があります。makefile は一連の .o ファイルを取り、それらを .so 共有オブジェクトにリンクします。わかりましたので、ダーウィンでこれに最適なアナログは dylib であると考えました (これは間違っていますか?)。そこで、-shared フラグを -dynamiclib に変更しました。
現在、dylib にリンクしているコードは、多くの外部ライブラリに依存しています。dylib をビルドしようとすると、未定義の参照があるというエラーが表示されます。しかし、Linux Makefile は、.so ファイルを作成するビルド ステップで -lwhatever または -L/path/whatever オプションを指定していません。ん?これは、ELF .so ファイルを作成すると、デフォルトで外部参照が未解決のままになり、共有ライブラリがロードされると再帰的にロードしている共有ライブラリに依存する共有ライブラリをロードしますか? 共有ライブラリが .a または .o ファイルに依存している場合、それらを共有ライブラリに静的にリンクする必要があります。そうしないと、実行時にリンクできません。実行時にロードされるライブラリに未定義の参照があることをどのように回避できますか?参照が動的にロード可能なライブラリへの参照でもある場合を除きます。
とにかくそう指定すれば
共有ライブラリを作成するときに -l オプションと -L オプションを追加する必要はありません。しかし、これが最終的にどのように機能するかはまだわかりません。
c - C で外部定義された識別子の存在を確認する
iOS 用の Objective-C で開発しているときにこの問題に遭遇しましたが、これは Mac OS X/iOS リンカーを使用するすべての C/C++/Objective-C コードに当てはまるはずです。解決策は別の質問でカバーされていますが、私はその理由に興味があります。
定数を定義するライブラリへのリンクを使用しているとしましょう。ヘッダー ファイルには、次のような宣言があります。
アプリケーションをコンパイルして、その定数が定義されていない以前のバージョンのライブラリを使用してシステムで実行したいので、安全のために定義されているとは想定していません。
ライブラリの最新バージョンでのみ定義されている関数がある場合は、次のようにします。
関数コードのアドレスを含む代わりに、BrandNewFunc
NULL に評価されます。定数は同じように動作すると思いますが、同じパターンを試すと、チェックの実行中にアプリが停止します (iOS では EXC_BAD_ACCESS がスローされます)。具体的には:
代わりに機能するのは、識別子のアドレスをチェックすることです:
ロジックはわかりますBrandNewIdentifier
。値がないため、アクセスは失敗するはずです。しかし、なぜその構文は次の場合に機能するのBrandNewFunc
でしょうか? そのアドレスも確認する必要があるのではないでしょうか? それとも、実際には一貫しており、見落としているものがありますか?
c - Darwin で大きなファイルのサポートを有効にするには?
Mac OS X 10.6.4 用にコンパイルしようとしている C アプリケーションがあります。
私のgcc
は次のとおりです。
私のMakefile
は次のとおりです。
問題は、私のアプリケーションがfseeko64
andを呼び出し、オフセットfopen64
の型を使用することです。off64_t
アプリケーションをコンパイルすると、次の警告とエラーが表示されます。
私のコードは、Linux でエラーなくビルドされます。Darwin でビルドするときに大きなファイルのサポートを追加するには、ソース コードにどのような変更を加えることができますか?
iphone - デバイスメモリXcodeを取得する
私は本当に現在のデバイスを取得する方法を知る必要があります:
- アクティブメモリ
- 非アクティブなメモリ
- 有線メモリ
- フリーメモリ
- トータルメモリ
情報、コード、その他何でも役に立ちます。
前もって感謝します。
iphone - ARM Darwin アセンブリ -- システム コールの検索 (おそらくチュートリアル)
そこで私はアセンブリプログラミングを始めました。私の Ubuntu ボックスでは非常に単純です。NASMamd GNU ld を使用して、多かれ少なかれ複雑な HelloWorld スタイルのプログラムを 30 分で作成できました。しかし、iPhone の場合は非常に複雑です。まず、4.2.1 ファームウェアの JB'en iPhone 3G を使用しています。つまり、Darwin カーネル v10 の ARM ポートを使用しています。2番。iPhone 用の NASM がないため、GNU を使用する必要があります。ネイティブ ツールチェーン (Mac OS X の Xcode と Linux のオープンソース ツールチェーンの両方) は GCC を使用します。そこで、次の基本情報をまとめました。 - GNU でアセンブリを言語として記述する方法。-基本的なARM命令、レジスタ、メモリアクセスは何ですか。
ただし、HelloWorld でさえ、stdout に書き込むためにカーネル呼び出しが必要です。私の質問は、どのカーネル呼び出しをどのように使用するか (どの引数がどこに行くのか) です。swi # ARM 命令を使用する必要がありますね。
それで、チュートリアルへの情報/リンク、またはARM Darwin Hello world asmコードを持っている人を投稿してもらえますか?
今のところ、私はこれを行うことができます:
ただし、ARMでは、次のようにすることしかできませんでした:
では、どなたかお願いします。
ios - 名前付き OSMallocTag を作成したライブラリを見つけることはできますか?
iOS アプリのヒープ使用量を測定するために割り当てインストゥルメントを使用しています。タグ名「Memory Tag 70」の領域に大量のメモリが割り当てられていることがわかりました。追跡できるように、その責任者を知りたいです。
- この記憶について何かしようとすることが適切かどうか
- もしそうなら、私はそれについて何をすべきか (つまり、どのコードがその領域にオブジェクトを割り当てているか)。
OSMalloc_tagAlloc()
では、特定の引数を持つ への呼び出しがどこから来ているのかを追跡できますか? デバイス上ではなく、シミュレーターで実行している場合にのみ実行できる可能性があることを受け入れます。しかし、それが事実である場合、どうすればよいでしょうか。タグ名を表示できますか?dtrace
もしそうなら、シミュレーターでアプリを起動できdtrace -c
ますか? どのように?
multithreading - OS X にはどのような種類のスレッドがありますか?
カーネルレベルのスレッド (Linux や一部の *BSD システムなど) か、それとも何か? 違いがある場合は、pthreads を使用しています。
c++ - G ++警告:リンクされているアーキテクチャではないサポートされていないファイル形式用に構築されています
(コマンドラインを使用して)プロジェクトをコンパイルしようとすると、次g++ *.hpp *.cpp 2> log.txt
のようになります。
log.txt
:
なぜこれが起こっているのかについてのアイデアはありますか?私はOSX10.6を使用しています(最新の開発者ツールを使用)
osx-snow-leopard - Mac VFS / HFS +でアトミックな名前変更は可能ですか?
Mac OS XでACLがサポートされているため、ファイルを書き込み可能であるが削除不可として宣言する方法があります。
VFSの現在の実装は既存のターゲットであるため、これはアトミック書き込みで問題を引き起こします。書き込み権限を持つ既存のファイルがある場合、アトミックに書き込むことができない可能性があります。
状態を示すACLをアタッチするだけで、アトミック書き込み(さまざまなCocoa APIによって実装されるような-NSArrayなど)は失敗しますが、非アトミック書き込みは問題なく成功します。rename
delete
deny delete
writeToFile:atomically:
低レベルのCコードについての私の理解はかなり限られているので
、代替の実装は、マイナーな(「マイナー」のお気に入りの定義を挿入する)頭痛だけで実行可能ですか?
ありがとう
ダニエル
macos - Mac OS X カーネル拡張でキャッシュするために OS によって再利用されるメモリ バッファを割り当てるにはどうすればよいですか?
私が読んだドキュメントと xnu ソースに基づいて、Mac OS Xは Unified Buffer Cache (UBC) を使用してファイルI/O をキャッシュすることを理解しています。UBC は、使用可能な RAM に基づいて可能な限り大きくなりますが、UBC ページは、メモリが不足したときに最初に犠牲になるページの一部です。
私のドライバーでは、ディスク上のさまざまなメタデータを扱います。UBC や同様のメカニズムを使用して、このデータの MRU キャッシュを維持し、速度を向上させたいと考えていますが、カーネルが必要なときにいつでもそのメモリを取り戻すことができるようにしたいと考えています。ただし、メタデータはファイルデータを表していないため、UBC のドメインに直接分類されません。使用できる下位レベルのメカニズムはありますか、またはバッファー自体を処理する UBC の一部のみを使用できますか?
私は現在、HFS+ のソース コードを調べて、ファイルシステムのメタデータをキャッシュするかどうか、およびその方法を調べていますが、あまり成功していません。
もちろん、主な代替手段は、キャッシュ用に特定のメモリ領域を予約し、独自の LRU カリングを行うことです。固定キャッシュ サイズを選択するか、ある種のヒューリスティックを使用することができますが、RAM が豊富な場合はメモリの使用量が少なすぎ、そうでない場合はメモリが多すぎます。
アップデート:
さらに検索したところ、 のインスタンスがオプションIOBufferMemoryDescriptor
で作成される可能性があることがわかりました。これにより、破棄するメモリ「公正なゲーム」をマークするためにそれをkIOMemoryPurgeable
呼び出すことができます。IOMemoryDescriptor::setPurgeable()
私はそれを試して、結果で質問を更新します。