問題タブ [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.
windows - Unix ツールチェーン開発環境の統合: cygwin、MSYS2、git bash、Qt
私は長い間 cygwin と emacs を使用してきましたが、統合には常に問題がありました。cygwin での xemacs は完全に機能しましたが、xwindows を実行する必要があり、不快でした。次に、git bash をミックスに追加しました。
数えると、Windows の下に 4 つの個別の UNIX 実装があります。
Windowsでネイティブに実行されているemacsを使用します。
これらのツールの一部を統合して削除できるかどうかを知りたいです。cygwin と MSYS2 に git があるのはばかげているようです。では、なぜ別の git bash を用意するのでしょうか? 私が読んだところによると、とにかく git は MSYS2 で実行されています。
しかし、私は非常に疑わしいです。以前は、cygwin は mingw と同じではありませんでした。私が見つけた 2 つの大きなバグがありました。1 つは、mingw でネイティブ ライブラリを使用していたランタイム ライブラリです。そのため、コンパイラが同じであっても、long double を使用してプログラムをコンパイルすると、機能しないプログラムが生成されました。
今試してみましたが、MSYS2 で動作します。これは、すべての gnu ライブラリを使用しているか、Microsoft が更新したためである可能性があります。
スレッディングもmingwでは機能しませんでしたが、cygwinでは機能しました。MSYS2-64 で次の C++ コードをテストしました。
MSYS2 にインストールされているように、emacs で実行すると、ジョブは停止しません (シェルを強制終了する必要があります)。コマンドラインで動作します。スリープ呼び出しのコメントを外すと、MSYS2 bash と emacs コマンド シェルの両方でハングします。
それからgitに問題があります。
git bash は、.ssh を格納するディレクトリとして /c/Users/myuser を使用しています。できます
cygwin で $HOME を echo すると、/c/Users/myuser が表示されますが、存在しない /home/myuser を使用しようとします。つまり、.ssh ディレクトリが存在しないため、失敗します。したがって、cygwin でビルドできますが、面倒な git bash をプッシュする必要があります。完全な開発環境がないため、git bash でビルドできません。
MSYS2 は HOME が /c/Users/myuser であると主張しますが、git push を試みると同じエラーが表示されます。
ディレクトリ '/home/myuser/.ssh' を作成できませんでした。そのため、内部のどこかに、.ssh が c:/Users/myuser ではなく /home/myuser にあるという概念がハードコーディングされています。
さらに悪いことに、cygwin には /home ディレクトリがあり、現在は存在しませんが、デフォルトで作成された /home/myuser を思い出すようです。MSYS2 には NO DIRECTORY /home がありません。作成する必要があるのでしょうか。
Windows で動作する場合、c:/Users/myuser にシンボリックにリンクされたものを作成できますか? 私はちょうどこれを試しました:
シェルがハングしました。それは良いことではありません!シェルを殺して、再び走りました。どういうわけかそこにディレクトリがありました /home/myuser (ただし、私のシンボリックリンクではありません)。それがどのように生成されたのか、私にはわかりません。しかし、内部にシンボリックリンク .ssh を作成したところ、動作するようになりました。でも、何が起こっているのか分からないので、緊張します。
MSYS64 には、cygwin よりも大きな利点があります。パッケージマネージャーがあり、インストールがはるかに高速で、cygwin よりもはるかに小さいです。コンパイラは新しいです。
emacs と MSYS64 にはまだいくつかの問題がありますが、これについては別の質問で尋ねます。C++ とデータ構造のクラスにこれをインストールするよう学生に依頼できるかどうかを調べているので、スレッド化とコンパイルが確実に機能するようにしたいと考えています。これまでに解決できなかったエラーには、次のものがあります。
スレッド化の回避策はありますか
/home/user に何が起こっているのですか? 私はそれを機能させましたが、後で噛む可能性があることを理解する必要があります.
他の互換性の問題が潜んでいますか?
スレッドの問題はまだ残っているようです。
要約すると、MSYS2 で git を使用する方法はありますか? 安全に git と cygwin を取り除くことはできますか? それとも、cygwin を維持する理由はありますか? git bash を個別に保持する必要がありますか?
linux - 静的にリンクされたライブラリを置き換える/上書きする
foo.so
ベンダーから提供されたオブジェクト ファイル — — があります。そのオブジェクト ファイルは、公開されているライブラリ — に静的にリンクされていましたbar_1.0.a
。bar_1.1.a
重大なバグを修正した新しいバージョンのライブラリがありますが、ベンダーは の新しいバージョンを提供してfoo.so
いないため、バグ修正を利用できません。
のソース コードにアクセスできないためfoo.so
、新しいバージョンの に対して再コンパイルすることはできませんbar
。のソース コードにアクセスできるのでbar
、自由にビルドできます。のシンボルはbar
1.0 と 1.1 の間で変更されておらず、実装の一部のみが変更されています。
のソースコードにアクセスせずに、静的にリンクされbar_1.0.a
たライブラリをに置き換える/オーバーライドする方法があるかどうかを知りたいです。または、それが不可能な場合は、静的にリンクされているにもかかわらず、何らかの方法で動的にリンクすることを強制できますか?foo.so
bar_1.1.a
foo.so
foo.so
bar_1.1.so
bar_1.0.a
動的リンクに影響を与えるさまざまな環境変数があることは知っていLD_*
ますが、この場合はそれが役立つとは思いません。
arm - サイズ最適化のために newlib をビルドするにはどうすればよいですか?
Newlib 2.5.0 をターゲット C ライブラリとして arm-eabi-gcc ツールチェーンを構築しています。
ターゲットの組み込みシステムは、実行速度よりも小さいコード サイズを優先します。コード サイズを小さくするように newlib を構成するにはどうすればよいですか?
strstr
デフォルトのビルドは、コード サイズが 1KB を超えるバージョンを生成するようなことを行います。