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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# プログラム Arduino 1 2022/07/03 11:13
- C言語・C++・C# Cのコンパイルでコメントアウトをそのままオブジェクトに保持したい 7 2023/08/01 22:22
- ノートパソコン Windows11を最小要件満たさずにアップグレードってできますか? 8 2022/07/17 14:19
- ノートパソコン 予算は5万円ぐらいで ノートパソコン 選び 9 2023/01/15 10:13
- モニター・ディスプレイ フルHD6枚表示できるPCの最適構成は何でしょうか? 4 2022/11/18 19:07
- C言語・C++・C# 参考にいろいろとc言語、c++言語プログラミングでレジストリーを操作したいのですが、無料配布のc++ 3 2022/12/22 01:49
- Excel(エクセル) vba コンパイル 4 2022/10/27 10:01
- CPU・メモリ・マザーボード PCスペック(CPUとGPUのバランス)について ボトルネックチェッカー (https://babl 3 2022/10/30 15:33
- その他(パソコン・周辺機器) 2つのPCを行き来する 2 2022/06/15 01:59
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
エクセルの表にヘンな枠が・・・
-
pingは正常なのにtracerouteで...
-
常に全画面表示するには・・・
-
バッチファイル内の各コマンド...
-
shutdownコマンド実行の残り時...
-
linux初心者です wineをつかっ...
-
linuxサーバーのキャッシュをク...
-
python IDLEで訂正、削除のやり...
-
bashで変数にパイプを入れ、コ...
-
シェルスクリプト内の「exit」
-
複数のバッチを同時並行で起動...
-
CRONを隔週の日曜日に実行させたい
-
ソフトの実行を自動化したいです。
-
Linux上で、C言語で作ったプロ...
-
Centosで、現在実行中のPHPを確...
-
Linux のシェルスクリプトの強...
-
taskkill をバッチ処理できない。
-
MathematicaにおいてのDo文につ...
-
SPI非言語の問題 解説お願いします
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの表にヘンな枠が・・・
-
SONYの音楽ソフト「x-アプリ」...
-
pingは正常なのにtracerouteで...
-
python IDLEで訂正、削除のやり...
-
LD_LIBRARY_PATHって?
-
ROBOCOPY cmdで正常に処理され...
-
emacsでCtrl+zを押してサスペン...
-
shutdownコマンド実行の残り時...
-
バッチファイル内の各コマンド...
-
taskkill をバッチ処理できない。
-
エクセルからアクセスのプロシ...
-
linuxサーバーのキャッシュをク...
-
Openイベントを開始させないで...
-
CRONを隔週の日曜日に実行させたい
-
windows10のごみ箱をrd /s /q C...
-
人生をやめる決意をしても中々...
-
自分の言動に責任を持つとは、...
-
コマンドプロンプト Windows
-
最初の一度しか実行されないロ...
-
Linux のシェルスクリプトの強...
おすすめ情報