Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.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
C++ 动态链接_C++_Dynamic_Linker - Fatal编程技术网

C++ 动态链接

C++ 动态链接,c++,dynamic,linker,C++,Dynamic,Linker,如何检查系统上的动态链接实现情况?以及对动态链接的代码有哪些限制。代码动态链接的要求是什么?无论操作系统是什么,似乎您都在问是否有任何可移植的方法来检查您的操作系统功能 唯一可以说的是“阅读文档” 就我所知的操作系统而言,Windows使用DLL进行动态链接,Unix使用.so文件。两者都提供了手动或自动加载库入口点的功能。看起来,无论操作系统是什么,您都在询问是否有任何可移植的方法来检查您的操作系统功能 唯一可以说的是“阅读文档” 就我所知的操作系统而言,Windows使用DLL进行动态链接,

如何检查系统上的动态链接实现情况?以及对动态链接的代码有哪些限制。代码动态链接的要求是什么?

无论操作系统是什么,似乎您都在问是否有任何可移植的方法来检查您的操作系统功能

唯一可以说的是“阅读文档”


就我所知的操作系统而言,Windows使用DLL进行动态链接,Unix使用
.so
文件。两者都提供了手动或自动加载库入口点的功能。

看起来,无论操作系统是什么,您都在询问是否有任何可移植的方法来检查您的操作系统功能

唯一可以说的是“阅读文档”


就我所知的操作系统而言,Windows使用DLL进行动态链接,Unix使用
.so
文件。两者都提供手动或自动加载库入口点的功能。

动态链接由操作系统在运行时执行

  • 因此,它有以下限制:

  • 特定于操作系统

    例如,Windows.dll不能直接链接到linux, 你需要在那里构建它并生成,反之亦然

  • DLL是特定于平台的:

    X64 dll不能链接到Win32项目

  • 它们也是特定于配置的:

    如果你有一个发布dll,你不能将它链接到另一个项目 设置为调试的配置

  • 它还取决于调用约定:

    例如,如果.dll项目的调用约定设置为uu cdecl,则 被调用方将其调用约定设置为u stdcall,这可能会导致运行时异常等问题


操作系统在运行时执行动态链接

  • 因此,它有以下限制:

  • 特定于操作系统

    例如,Windows.dll不能直接链接到linux, 你需要在那里构建它并生成,反之亦然

  • DLL是特定于平台的:

    X64 dll不能链接到Win32项目

  • 它们也是特定于配置的:

    如果你有一个发布dll,你不能将它链接到另一个项目 设置为调试的配置

  • 它还取决于调用约定:

    例如,如果.dll项目的调用约定设置为uu cdecl,则 被调用方将其调用约定设置为u stdcall,这可能会导致运行时异常等问题


或者更全面的方法是
阅读
libtool
源代码
。请记住,DLL不能跨操作系统移植。Windows DLL在Unix或Linux操作系统上不起作用。或者更全面的方法是
阅读
libtool
源代码
。请记住DLL不能跨操作系统移植。Windows DLL在Unix或Linux操作系统上不起作用。实际上,在调试项目中几乎没有什么可以阻止您使用发行版DLL,而这实际上是非常常见的。例如,Windows API是通过将Kernel32.DLL、User32.DLL、GDI.DLL等加载到进程中来实现的。您几乎总是加载Windows版本DLL,即使在调试时也是如此。(大多数开发人员甚至不知道Windows的调试版本叫什么——它是经过检查的版本)实际上,几乎没有什么可以阻止您在调试项目中使用发行版DLL,事实上这是非常常见的。例如,Windows API是通过将Kernel32.DLL、User32.DLL、GDI.DLL等加载到进程中来实现的。您几乎总是加载Windows版本DLL,即使在调试时也是如此。(大多数开发人员甚至不知道Windows的调试版本叫什么——它是经过检查的版本)