問題タブ [gnu-toolchain]
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.
gcc - x86_64 で静的ライブラリをコンパイルするときに、gcc が暗黙的に -fPIC フラグを提供しないのはなぜですか
静的ライブラリに対して静的にリンクする共有オブジェクトをコンパイルする際に、多くの問題が発生しました。この問題は、x84_64 プラットフォームでのみ発生します。x86_32 で同じコンパイル作業を行う場合、問題はありません。
おそらくこれは OS 固有の GCC 構成の問題ですが、私の調査では、GCC が x86_64 プラットフォームでどのように機能するかが示されています。とにかく、Ubuntu 10.04 x86_64 で gcc 4.4.3 を使用しています。
問題はどのように修正されますか?... すべての静的ライブラリの依存関係が -fPIC でコンパイルされていることを確認します。
質問 1: -fpic と -fPIC の違いは何ですか (明らかに -fPIC は x86 でより多くの命令を生成します)。x86_64 コンテキストでは、後のタイプの方が関連性が高いのはなぜですか?
質問 2:私の仮定では、静的コードに対してリンクする場合、リンク時に関数をバイナリに配線しているのに、「位置に依存しないコード」機構が提供する間接的なレベルが必要なのはなぜですか?
質問 3:共有オブジェクトを静的アーカイブにリンクするために x86 が -fpic / -fPIC を必要としない場合、なぜ x86_64 で必要なのですか?
質問 4:必要な場合でも、暗黙的に提供されないのはなぜですか? 重大な変更は絶対にダメだと思っていた
c - GNU ツールチェーンを使用して C プログラミングを学習するにはどうすればよいですか?
私はプログラミングが初めてで、Linux も初めてです。Linux は、プログラマーがマシン アーキテクチャと密接に連携できるため、プログラミングを学ぶのに最適な OS であると言われました。GNU ツール チェーンについてよく耳にし、それが Linux で最高のプログラミング環境を提供することを知ったので、IDE を使用しないことに決め、物事を正しく学ぶために必要なだけ多くの時間を費やしました。
Ubuntu 10.10 のインストールが完了しました。私は Vim をインストールし、それをテキスト エディタで使用する方法を学び始めました。また、GCC と GDB がシステムに存在することも確認できました。私は本から C でプログラミングすることを学んでいます - Computer Science: A Structured Programming Approach using C。エディター、コンパイラー、リンカー、ランナーを使用してプログラムを開発および実行する方法については説明していますが、それらをセットアップして使用する方法については説明していません。そこで私の質問は、テキスト エディターでソース コードを記述したら、GNU ツール チェーンを呼び出してプログラムをコンパイルして実行するにはどうすればよいかということです。
c++ - Visual Studio 開発と "Linux" 開発のワークフローの側面をデバッグしますか?
OK、「LinuxでのVisual Studioの同等物」またはこの質問のバリエーションを求める質問がたくさんあります。(ここ、ここ、ここ、...)
1 つの側面に焦点を当てて、さまざまなシステムでデバッグワークフローがどのように異なる可能性があるかを尋ねたいと思います。具体的には、Visual Studio (のような) システムで使用される完全に統合された IDE アプローチと、おそらくより「分離された」ツールチェーン指向のアプローチです。
この目的のために、「Visual Studio デバッグ ワークフロー」の簡単な説明と考えられるものを提示します。
- 与えられた既存のプロジェクト
- プロジェクトを開きます (ユーザーの観点からの 1 つのステップ)
- デバッグしたいコードに移動します (おそらくプロジェクト ファイルを検索します。これは、 [ファイルから検索] ダイアログ ボックスを開くだけで簡単に実行できます)。
- 行 (a) にブレークポイントを配置します。行にカーソルを置いて、
F9
- 行 (b) に「トレースポイント」を配置します。そこにブレークポイントを追加し、ブレークポイントのプロパティを変更して、デバッガーが停止しないようにしますが、代わりにローカル変数の値をトレースします。
- 実行可能ファイルを自動的にコンパイルし、デバッガーで起動し、prgが
F5
(a) で停止するまで待機します。その間、トレース ウィンドウで (b) の出力を監視します。 - デバッガーが最終的に (a) で停止すると、画面に次の情報が (1 回限りの事前構成されたウィンドウ)同時に並べて自動的に表示されます。
- 現在のコール スタック
- 最近変更されたローカル変数の値
- ロードされたモジュール (DLL)
- すべてのアクティブなブレークポイントとその位置のリスト
- 最後に入力したウォッチ エクスプレッションを含むウォッチ ウィンドウ
- 生のメモリの内容を調べるためのメモリ ウィンドウ
- 現在のレジスタ値を表示する小さなウィンドウ
プラス/マイナスのいくつかの機能、これは Linux の Eclipse/CDT でも期待できるものです。VIM、Emacs、gdb/DDD などで開発する場合、このワークフローと提示された情報はどのように取得されますか?
この質問は、あるツールに 1 つの機能があるかどうかということではなく、開発/デバッグ作業が機能の組み合わせを使用しており、多数のオプションをすぐに利用できることと、ツールを使用していないときにこの情報にアクセスする方法を確認することに関するものです。完全に統合された IDE。
gcc - 静的ライブラリをコンパイルするときに、以前の最小カーネル バージョンを設定する
私のディストリビューション (Arch Linux) は最近、そのツールチェーンでサポートされている Linux カーネルの最小バージョンを増やしました。静的にリンクしてから Web サーバーにアップロードする Web アプリケーションをコンパイルしていますが、Web サーバーのカーネル バージョンは、新しいツールチェーンでコンパイルされた静的ライブラリには古すぎます。(サーバー上で静的バイナリを実行しようとすると、セグメンテーション違反が発生します。) GNU ツールチェーン (GCC、binutils、glibc) を使用してアプリケーションをコンパイルし、新しいカーネル バージョンを必要とする機能を除外する方法はありますか?
emacs - Linux上の既存のMakefile用のIDE
複数のMakefile(ライブラリ、実行可能ファイルなど)を含む既存のC / C ++ソースがある場合、IDEタイプのセットアップを行うための最良/最速の方法は何でしょうか。
IDEでコンパイラエラーを処理し、できればコードをナビゲートする必要があります。
過去に私はEmacs/Xemacsを使用したことがあり、それは問題ありませんが、それを設定するための最良の方法がわかりません。
build - Python の最大バージョンの Autofoo テスト
Python の最小バージョンではなく最大バージョンをテストするように autofoo を取得しようとしています。例:
... Python >= 2.7 をテストし、おそらく /usr/bin/python3 で表示されます。ただし、python2.7を超えるものは何も返さないでください。
これを行う簡単な方法はありますか?周りに尋ねたところ、これまでに得た最良の回答は「マクロを書き直してください」というものでした。
前もって感謝します!
embedded - ロード タイム ベース アドレス cortex-m3 ベア メタル
ベアメタル環境のcortex-m3 CPUのプロジェクトに取り組んでいます。ソフトウェアのアップグレードが必要なため、CPU 上の実行可能イメージがフラッシュ メモリ内の 2 つのアドレスのいずれかにある可能性があり、これが問題を引き起こします。イメージの開始アドレスは、静的リンケージ中ではなく、ロード時にのみ認識されます。よくわかりませんが、これは動的ローディングとは言えませんが、私はこれについての専門家ではないので、ここで誤解される可能性があります。OS も動的ローダーもない場合に、ロード時にのみベース アドレスを指定できるように、イメージをコンパイルしてリンクする方法はありますか?
c++ - C++の特定のクラスから継承する宣言されたすべてのクラスのリストを取得するにはどうすればよいですか
これはC++では正確に可能ではないことは知っていますが、関数を持つコードを生成できるツールチェーンである可能性があります。この関数を呼び出すと、これらすべてのクラスのリストが表示されます。たとえば、複数のファイルにまたがって、次のようなものがあります。
次に、実行時に、クラスの単一インスタンスへのポインターが必要です。生成されたコードが次のようになっているとしましょう。
また、superListはタイプList<ParticularClass*>
です。さらに、Qtを使用して派生ParticularClass
するQObject
ので、とにかくクラスの名前を取得できます。基本的にクラスをイントロスペクトする必要があるので、私の内部コードは新しく定義された型についてはあまり気にしません。
それで、いくつかのツールチェーンでこのコードを生成する方法はありますか?一人でそれが可能なら、それはqmake
おかしなケーキの上のアイシングのようになるでしょう:)
お時間をいただき、誠にありがとうございます。
gnu-toolchain - sde-objcopy のアーキテクチャを指定する方法
sde-objcopy を使用して画像をオブジェクト ファイル (.o) に変換する必要があります。その後、この画像を no-os システムで使用できます。objcopy コマンドをテストしましたが、私の PC (Fedora 12) でうまく動作します。たとえば、次のコマンドは test.jpg を test.o に変換します。
objcopy -I binary -O elf32-i386 -B i386 ../stdy/test.jpg test.o
ここに私の質問があります:
A. _ sde-objcopy にはアーキテクチャを指定する「-B」オプションがありませんが、アーキテクチャを指定しないと、次のような警告が表示されます。
$ sde-objcopy -I binary -O elf32-little test.jpg test.o
sde-objcopy: 警告: 出力ファイルはアーキテクチャを表すことができません UNKNOWN!
この警告を修正するにはどうすればよいですか?
B. _ objcopy は、ファイルの名前を使用してオブジェクト ファイルにシンボルを生成しているようです。objcopy のパラメーターとしてフル パス (など/home/owner/stdy/test.jpg
) を使用すると、長い名前のシンボルが生成されます。この問題を解決するエレガントな方法はありますか?
$ objcopy -I binary -O elf32-i386 -B i386 ../stdy/test.jpg test.o
$ nm test.o
gcc - 現在のプラットフォームの BFD アーキテクチャ仕様を入手するにはどうすればよいですか?
次の方法を使用して、C プログラムにテキスト ファイルを埋め込みました: http://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967
objcopyは、「--output」オプションでターゲットを指定する必要があります。
objcopy がユーザーのアーキテクチャを使用するように、Makefile で「--output」を設定するにはどうすればよいですか?
ありがとう。