在
使用
多个
动态库
时,
两个
动态库
之间有可能存在相
同名
称的
函数
,这样会出现只有第一个
函数
生效,即所有对该
函数
的调用都将指向第一个加载的
动态库
的
同名
函数
中。这样就会很混乱,而且在想改名称也不是很简单的情况下就会很麻烦(例如
同名
函数
太多,甚至就是模板)等等。
这里只找到一种处理方法,当然你直接把名字改成不一样或者统一添加前缀(例如C++ namespace)也不错。方法如下:
变量会通过数据段的GOT表来访问。
而且,当可执行文件中(由于可执行文件不是PIC的)有
同名
全局变量时,共享
库
中定义的变量会被ignore,进程中只会存在可执行程序中的super_a。
之前在linux下做过一个测试:写一个so,该so中有一个全局变量。so中的代码在运行时会修改该全局变量的值。然后,有多个程序都需要该so,而且这些应用程序都启动了。此时,很显然so只被加载了一份,那么,当这么多程序在运行调用该so时,该so中的全局变量的值会被覆盖来覆盖去么?答案是不会。这是测试的答案。现在知道原理了,尽管这是windows via C/C++中解释的windows的做法,但是我...
今天看到一篇关于
函数
同名
的
问题
,讲解的不错,转发了。
下面是转发的内容:
万事皆有缘由,还是先从我遇到的这个
问题
说起~~~问:有一个主执行程序main,其中实现了
函数
foo(),同时调用
动态库
lib
a.so中的
函数
bar(),而
动态库
lib
a.so中也实现了foo()
函数
,那么在执行的时候如果在bar()中调用foo()会调用到哪一个?在main()中调用呢? 直接给答案:如果是在Linux上,
lib
a.so中的foo()
函数
是一个导出的(extern)”可见”
函数
,那么调用会落入主程序里,这对于
lib
a.
图1c
语言
是面向面向过程的程序设计:数据结构+算法,c
语言
的目的是高效。c++是面向对象的程序设计:由现实世界建立软件模型。c++比c加强的点:1.引入命名空间一个中大型软件往往由多名程序员共同开发,会
使用
大量的变量和
函数
,不可避免地会出现变量或
函数
的命名冲突。当所有人的代码都测试通过,没有
问题
时,将它们结合到一起就有可能会出现命名冲突。为了解决合作开发时的命名冲突
问题
,C++ 引入了命名空间(N...
最近某个程序需要调用多个
动态库
,但是不同的
动态库
中
使用
了功能不同的
同名
函数
,导致调用出现偏差,可参考以下解决办法。
假设有
动态库
lib
FuncA.so和
lib
FuncB.so,他们的内部实现分别为:
/*func_A.c*/
#include<stdio.h>
//内部
函数
int sayHi()
printf("Hi,this is AAAAA\n");
return 0;
//外部调用
函数
int sayOut()
sayHi();