可以执行和共享库包含同名函数
Can executable and shared library contain functions with the same name?
如果可执行库和共享库包含同名函数将会发生什么?例如EXE有这样的定义:
extern int fund()
{
return 0;
}
和共享库有相同的定义:
extern int fund()
{
return 1;
}
从可执行文件和共享库中调用的函数:1 - Windows版?2 -对于unix系统?
PS:当我在MFC应用程序中定义AfxWinMain时,在启动时它将被调用,而不是MFC DLL中的AfxWinMain。我需要一些理论,为什么会这样?
你们已经自己回答了标题中的问题。
非共享库依赖在链接时解析,而不是在加载时解析。一旦链接器满足了对静态库的外部引用,它将保持这种状态,Windows和Unix加载器都不会再尝试解析它(在链接阶段之后,该符号通常在二进制文件中甚至不"可见")。
当链接到库(无论是静态的还是动态的)时,链接器一旦找到满足要求的引用就停止搜索要解析的符号,并且不再在任何其他(或相同)库中查找该符号。这就是为什么您可以在库中为同一个函数提供多个定义(与目标文件相反,这些文件保证会被彻底搜索,因此会检查是否有重复的符号)。
只有在加载时需要解析的符号才被标记为"外部共享",并由加载器在运行时解析。
我看不出unixoid os和Windows在这方面有什么根本的区别。
相关文章:
- 当包含成员函数名为errno和cerrno时,g++7编译错误
- 重载运算符主体仅包含一个函数调用
- std::包含 std::函数回调的多个包装器的向量不起作用
- 扩展包含静态函数的类
- c++如何在特定文件中包含所有函数而不包含该文件
- new[] 一个包含构造函数的字节对象数组没有错,对吧?
- 使用头文件中包含的函数时未定义的引用
- 派生类是否C++必须在头文件中包含继承函数/成员的定义
- 匿名命名空间,用于在两个 cpp 文件中包含一个函数
- 包含虚函数的类可以成为单例
- 返回包含从函数捕获的 lambda
- 如何在单独的文件中包含全局函数
- 当包含全局函数时,c++错误lnk2005
- 与包含复杂函数的内联
- C++,OpenCV:不能包含Cvtcolor函数的imgproc库
- Eclipse CDT - 编辑器无法识别静态库中包含的函数
- 是否可以接受不在标头中包含所有函数声明以创建"private namespace"?
- 用包含同一类的struct的向量初始化
- C++:是否有一个包含各种函数的traits类来操作以零结尾的char*和wchar_t*字符串
- 使用多态基类(包含虚函数)访问数组元素时的类型