Кажется, вы используете стандартную библиотеку в качестве разделяемой библиотеки (поведение по умолчанию) при компоновке вашей программы дома.
Таким образом, вместо того, чтобы действительно "связывать" библиотеку, ваш компоновщик просто разрешает некоторые символы и выполняетдругая операция, с задержкой фактической загрузки библиотеки во время выполнения.
Когда вы выполняете свою программу на своем университетском компьютере, загрузчик (программа, которая фактически загружает вашу программу в память и выбрасывает основной поток)ищет библиотеки, в которых нуждается ваша программа, и пытается загрузить их (ищите LD_LIBRARY_PATH
в linux, если вам любопытно).
Проблема здесь в том, что вы связываете свою программу дома с версией stdlibэто не та же версия, что у вас в университете.Поэтому, когда загрузчик пытается найти библиотеку, происходит сбой, и ваша программа не может быть запущена.
Решения:
a) Чтобы избежать всех этих проблем, используйте staticсвязывание вместо динамического связывания.Я не уверен, возможно ли это с помощью stdlib, но я думаю, что стоит протестировать его (см .: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html и искать флаг "-static")
b) Вы можете попробоватьскомпилируйте свою программу на своем университетском компьютере, чтобы она использовала там версию.
в) Постарайтесь узнать, какая версия 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) не очень хорошее, но более полное описание библиотеки.