
No.2ベストアンサー
- 回答日時:
> 別PCでコンパイルしたCプログラムは、別のPC(CPU等の構成は違うが、同一のLINUX)でも動作するのでしょうか。
セルフコンパイルであるとの前提でお答えします。
基本的には動作しません。というよりか動作保証はされません。
ただし、たまたまコンパイル環境と実行環境が似ている場合は
動作することもありますがおすすめできません。
>1コア32ビットのCPUでコンパイルしたものと、2コア32ビットのCPUでコンパイルしたものは同一のバイナリになるのでしょうか?
基本的には違うでしょう。
CPUには新しい命令セットが追加されていきますのでコンパイラもそれに合わせて
進化していきますから、コアが複数あるというよりかCPUが違えばバイナリは違う可能性は
高いです。
これもまたCPUが近ければ同じようなバイナリを吐いてくれるかもしれませんが。
また、コンパイラも最適化アルゴリズム等どんどん進化しています。
>(コンパイラによる最適化が行われないのでしょうか?)
コンパイラがgccであるとの前提にお答えします。
最適化はデフォルトではされると思いますが、コンパイルスイッチで切り替えれます。
(-Oオプション)
No.3
- 回答日時:
ソフトウェアの動作可否は、APIとかライブラリーとかの互換性で
同じアーキテクチャのCPUにおいて、CPUの違いが問題になることは少ないですね。
実際にLinuxで、いろんなソフトをソースからコンパイルしてみれば
ライブラリー不足でmakeできないという例はいくらでも出てきます。
ライブラリーは静的リンクされるものと、動的リンクで利用されるものがあり
ソフトウェアの実行時にエラーが出るのは、動的リンクされるものです。
このほか、コンパイルするにあたって、与えられるコンパイルオプションの問題もあります。
CPUコアがいっぱいでうれしいといえば動画エンコードで
動画エンコードのフリーソフトウェアといえば、WindowsでもLinuxでもffmpeg。
というわけで、ffmpegのコンパイル手順を紹介する記事はよくあるのですが
これ読んでみると、いくつかのオプションが、その名称から意味をつかめると思います。
ffmpegの場合は、そのオプションが実行時に表示されるようになっているので
教材としてもいいですね。aptやyumで導入したものでもいいので、コンソール上で
ffmpegを実行してみると、たとえばうちで動いているものだと…
≫FFmpeg version UNKNOWN, Copyright (c) 2000-2009 Fabrice Bellard, et al.
≫ configuration: --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-libvorbis --enable-libtheora --enable-libmp3lame --enable-libfaac --enable-libfaad --enable-libxvid --enable-libx264 --enable-shared --disable-debug
≫ libavutil 49.12. 0 / 49.12. 0
≫ libavcodec 52. 9. 0 / 52. 9. 0
≫ libavformat 52.23. 1 / 52.23. 1
≫ libavdevice 52. 1. 0 / 52. 1. 0
≫ libpostproc 51. 2. 0 / 51. 2. 0
≫ built on Oct 26 2009 21:39:15, gcc: 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
≫At least one output file must be specified
と表示されます。
lib....と表示されているのが静的リンクされたライブラリーだと思っています。
その上に表示されているのがコンパイルオプションで
--enable-pthreadsオプションが、CPUコアの数(というか同時実行スレッド数)に関わるオプションで
いわゆるマルチスレッドエンコードを可能にするオプションです。
Windows版のFFMPEGであれば、--enable-w32threadsオプションです。
つまり、そういうのは自動的にコンパイラが決めるのではなく
makeの前のconfigureスクリプトのオプションなどで設定すべきものです。
何かコンパイルする際に、その前に用意されていることの多いconfigureスクリプトには
--helpオプションがついていることもあるので、見てみましょう。
本当は、readmeとか読むべきなんですけど…まぁ、私も英文は苦手なので(略)
で、実際の実行環境としては、仮に同じOSを同じ設定で使っているのであれば
シングルスレッド環境で--enable-pthreadsオプションをつけてコンパイルし
それをその環境で実行することも、マルチスレッド環境で実行することも可能です。
実行時のマルチスレッド処理は、半分はOS側で管理され
残り半分は、(ソフトウェアによっては)実行時オプションによって指定されます。
たとえばffmpegであれば、-threads 3といったオプションで利用するコア数を指定できます。
もちろんそれにはOS KernelがSMP対応でmakeされている必要もあり
実際の挙動や実行オプションの与え方などは多種多様だと思います。
字数が尽きますので割愛しますが…
一般的なLinuxはi386最適化やPentium最適化で
SSE2などを利用できない状態でmakeされたソフトが含まれていたりします。
64bit版を選択すると、より新しいCPUへ最適化されているので
64bit化以外の部分で高速化することもあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
エクセルの表にヘンな枠が・・・
-
Linux のシェルスクリプトの強...
-
pingは正常なのにtracerouteで...
-
最初の一度しか実行されないロ...
-
アクセスで複数のSQL文をワンク...
-
信頼済みサイト登録をbatファイ...
-
windows10のごみ箱をrd /s /q C...
-
emacsでCtrl+zを押してサスペン...
-
Openイベントを開始させないで...
-
【nslookupコマンド】 で 【unk...
-
SPI非言語の問題 解説お願いします
-
PowerShellのスクリプト実行に...
-
sudoで実行したコマンドの実行...
-
デフラグは途中で止めても効果...
-
shutdownコマンド実行の残り時...
-
英語版での表示
-
デフラグの目安
-
pstファイル破損?
-
batファイルを最小化で実行する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
エクセルの表にヘンな枠が・・・
-
大手町駅。それはホームから非...
-
pingは正常なのにtracerouteで...
-
お気に入りの処理について。
-
文化祭の書類で不備がありました
-
Linux のシェルスクリプトの強...
-
党首討論を見てます。 この石破...
-
windows10のごみ箱をrd /s /q C...
-
最初の一度しか実行されないロ...
-
python IDLEで訂正、削除のやり...
-
バッチファイル内の各コマンド...
-
SPI非言語の問題 解説お願いします
-
Openイベントを開始させないで...
-
時間のマクロで最初はその時間...
-
sudoで実行したコマンドの実行...
-
emacsでCtrl+zを押してサスペン...
-
PowerShellのスクリプト実行に...
-
シャットダウンバッチがうまく...
-
LD_LIBRARY_PATHって?
おすすめ情報