Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux如何在应用程序中加载库_Linux_Linker_Linux Kernel_Static Linking_Dynamic Linking - Fatal编程技术网

linux如何在应用程序中加载库

linux如何在应用程序中加载库,linux,linker,linux-kernel,static-linking,dynamic-linking,Linux,Linker,Linux Kernel,Static Linking,Dynamic Linking,我感兴趣的是linux在图中所示的情况下是如何工作的。 您可以看到库“A”与应用程序静态链接。但此应用程序依赖于动态库B,而动态库B又依赖于库A。 那么,哪个库A将使用动态库B?在我的应用程序中静态链接库A,否则它将再次加载其他库A。 如果这些库有不同的版本,这一点很重要。 你也可以给我推荐一些关于我的文章,因为对我来说链接器就像一个黑匣子。动态链接库BlibB.so-当libB.so构建时,应该动态链接到libA.so将看不到静态链接的libA.a(更糟糕的是,它可能有该库的重复全局变量,因


我感兴趣的是linux在图中所示的情况下是如何工作的。

您可以看到库“A”与应用程序静态链接。但此应用程序依赖于动态库B,而动态库B又依赖于库A。
那么,哪个库A将使用动态库B?在我的应用程序中静态链接库A,否则它将再次加载其他库A。
如果这些库有不同的版本,这一点很重要。

你也可以给我推荐一些关于我的文章,因为对我来说链接器就像一个黑匣子。

动态链接库B
libB.so
-当
libB.so
构建时,应该动态链接到
libA.so
将看不到静态链接的
libA.a
(更糟糕的是,它可能有该库的重复全局变量,因此可能会给您带来噩梦)

实际上,
libA.a
不存在于主程序的ELF可执行文件中。只有来自
libA.a
的部分而非所有对象文件
a*.o
静态链接在可执行文件中(那些实际需要的文件)

请参阅本书、wikipage on and on和Drepper的论文。另请参阅、、手册页。使用
strace
,然后尝试一次
cat/proc/self/maps

简而言之,避免静态和动态链接同一库(即使是类似或不同版本的库)

经验法则:始终动态链接,除非您知道自己在做什么以及为什么