在家中链接程序时,您似乎将标准库用作共享库(默认行为)。
因此,您的链接器并没有真正“链接”库,而是解析一些符号并执行另一个操作,同时将库的实际加载延迟到运行时。
当您在大学计算机上执行程序时,加载程序(实际将程序加载到内存中并抛出主线程的程序)会查找您的程序需要的库并尝试加载它们(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)一个不太好但更完整的库描述。