自宅でプログラムをリンクするときに、標準ライブラリを共有ライブラリ(デフォルトの動作)として使用しているようです。
したがって、リンカはライブラリを実際に「リンク」するのではなく、ライブラリの実際のロードを実行時に遅らせながら、いくつかのシンボルを解決して別の操作を実行します。
大学のコンピューターでプログラムを実行すると、ローダー(実際にプログラムをメモリにロードしてメインスレッドをスローするプログラム)が、プログラムに必要なライブラリを探してロードしようとします(LD_LIBRARY_PATH
興味がある場合はLinuxで探してください)。 。
ここでの問題は、自宅のプログラムを、大学で持っているものと同じバージョンではないstdlibのバージョンにリンクしていることです。したがって、ローダーがライブラリを見つけようとすると失敗し、プログラムを実行できなくなります。
ソリューション:
a)これらすべての問題を回避するには、動的リンクではなく静的リンクを使用します。これがstdlibで可能かどうかはわかりませんが、テストする価値があると思います(http://gcc.gnu.org/onlinedocs/gcc/Link-Options.htmlを参照して、「-static」フラグを探してください)。 )。
b)大学のコンピュータでプログラムをコンパイルして、そこでのバージョンを使用するようにすることができます。
c)そこにインストールされているstdlibのバージョンを確認し、同じバージョンをコンパイラマシンにインストールしてみてください。
d)ホームバージョンのstdlibをアプリケーションと同じフォルダーにコピーしてみてください。これは通常、ローダーが環境変数LD_LIBRARY_PATH
(linux)で設定されたパスを調べる前に、現在のアプリケーションフォルダーで共有ライブラリを検索する傾向があるために機能します。
お役に立てば幸いです。
PS:ここでは、静的ライブラリと共有/動的ライブラリの優れた紹介がありますhttp://www.network-theory.co.uk/docs/gccintro/gccintro_25.html
そして、ここ(http://en.wikipedia.org/wiki/Library_%28computing%29)は、それほど素晴らしいものではありませんが、より完全なライブラリの説明です。