Questions tagged «dynamic-linking»


16
静态链接与动态链接
在某些情况下,是否有任何令人信服的性能原因选择静态链接而不是动态链接?我已经听过或阅读了以下内容,但是我对这个主题的了解不足,无法保证其准确性。 1)静态链接和动态链接之间的运行时性能差异通常可以忽略不计。 2)(1)如果使用使用概要文件数据来优化程序热路径的性能分析编译器,则不正确,因为使用静态链接,编译器可以同时优化您的代码和库代码。使用动态链接只能优化您的代码。如果大部分时间都花在运行库代码上,那将有很大的不同。否则,(1)仍然适用。


4
从C调用Go函数
我正在尝试创建一个用Go语言编写的静态对象,以与C程序(例如,内核模块)交互。 我已经找到了有关从Go调用C函数的文档,但是关于如何走另一条路却找不到很多。我发现这是可能的,但是很复杂。 这是我发现的: 有关C和Go之间的回调的博客文章 CGO文档 Golang邮件列表帖子 有任何人对此有经验吗?简而言之,我正在尝试创建一个完全用Go编写的PAM模块。

2
直接告诉gcc静态链接库
使用它-Wl,-Bstatic来告诉gcc我要静态链接的库对我来说很奇怪。毕竟我告诉gcc直接有关与库(链接的所有其他信息-Ldir,-llibname)。 是否可以直接告诉gcc驱动程序应静态链接哪些库? 澄清:我知道,如果某个库仅存在于静态版本中,它将在不使用的情况下使用它-Wl,-Bstatic,但是我想暗示gcc更喜欢静态库。我也知道直接指定库文件将与它链接,但是我更喜欢保持包含静态库和动态库的语义相同。

1
动态链接共享库时,全局变量和静态变量会发生什么?
我试图了解将具有全局变量和静态变量的模块动态链接到应用程序时会发生什么。所谓模块,是指解决方案中的每个项目(我在Visual Studio中工作很多!)。这些模块内置于* .lib或* .dll或* .exe本身中。 我了解到,应用程序的二进制文件在数据段中包含所有单个转换单元(目标文件)的全局和静态数据(如果为const,则为只读数据段)。 当该应用程序使用带有加载时动态链接的模块A时会发生什么?我假设DLL有一个用于其全局变量和静态变量的部分。操作系统是否加载它们?如果是这样,它们将装载到哪里? 当应用程序使用带有运行时动态链接的模块B时,会发生什么? 如果我的应用程序中有两个同时使用A和B的模块,是否按如下所述创建A和B的全局变量的副本(如果它们是不同的过程)? DLL A和DLL B是否可以访问应用程序全局变量? (请同时说明您的原因) 从MSDN引用: 在DLL源代码文件中声明为全局的变量被编译器和链接器视为全局变量,但是加载给定DLL的每个进程都会获得该DLL全局变量的自己的副本。静态变量的范围仅限于声明静态变量的块。结果,每个进程默认都有自己的DLL全局和静态变量实例。 从这里: 动态链接模块时,不清楚不同的库是否具有自己的全局实例或是否共享全局实例。 谢谢。

4
链接器做什么?
我一直想知道。我知道编译器会将您编写的代码转换为二进制文件,但是链接程序会做什么?他们一直是我的谜。 我大致了解什么是“链接”。这是将对库和框架的引用添加到二进制文件中的时候。除此之外,我什么都不懂。对我来说,它“有效”。我也了解动态链接的基础知识,但没有什么太深的。 有人可以解释一下这些条款吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.