我正在努力学习C++,并试图了解不同编译器及其技术的基础知识。我通过谷歌搜索了很多内容,但每次遇到新的术语都需要更多的解释。那么,在这个主题中,静态编译、动态链接等术语在实际操作中意味着什么呢?
我正在努力学习C++,并试图了解不同编译器及其技术的基础知识。我通过谷歌搜索了很多内容,但每次遇到新的术语都需要更多的解释。那么,在这个主题中,静态编译、动态链接等术语在实际操作中意味着什么呢?
编译通常是静态的,因为它是预先编译的(例如,使用GCC进行编译时)。有时会执行即时编译(例如,由大多数JVM执行)。
如果在Linux上以C++编码,则需要使用g++ -Wall -g
进行编译(稍后使用-O2
在程序调试时请求GCC进行优化)。请参阅此处和那里的提示。
f()
的功能。然后,如果f()
稍后更改,则必须重新链接和重新分发应用程序以合并对f()
的更改。或者,您可以将f()
放入动态链接库中,这意味着包含f()
的单独库文件与您的程序一起或独立分发。每次您的程序开始运行时,它都会查找动态库文件以获取用于f()
的代码。因此,如果您分发更新的动态库,则可以更新f()
而无需重新分发调用f()
的所有应用程序。有时,这只是向用户分发更新软件的更好模型,并避免让每个单独的应用程序参与到f()
的更新分发中。(偶尔这是一场灾难,因为动态版本的f()
实际上还没有与应用程序进行过测试,并且会以微妙不同的方式执行某些操作,从而导致应用程序出错)。