这是在Linux上的工作方式:
1)不,您不需要做任何事情。但是,您可以使用gcc
-fvisibility命令行参数限制导出变量,并使用可见性属性显式标记导出的条目。
2)可执行文件将包含其导入的所有功能的表(这些功能均具有默认可见性)。加载程序/链接程序将在运行之前选择一个地址来将库加载到该表并填充该表,对这些函数的调用是间接调用。(请注意,这也适用于共享对象)
3)静态链接是在链接时(在编译后)执行的。实际地址在程序集中被替换,它们是直接调用。
注意:有一个叫做PIC(位置无关代码)的东西。AFAIK,它处理在同一个共享库中对数据/函数的引用,因此链接器在加载库时不必覆盖库的一半代码,因为该代码不会对其库进行任何绝对引用自己的数据。您可以尝试尝试一下。



