我使用libffi在多个平台上运行时加载dll。 正确的系统path是自动search,我只需要知道在Microsoft平台上的系统DLL的名称是在标准的C库函数。
Windows在msvcrt.dll中附带一个C运行库。 如果你正在编写一个自包含的程序,并且想从C标准库调用函数,那么这也许就是你所需要的。
如果您的程序使用与其他C运行时链接的库,那么这对您并不合适。 但是在这种情况下,你不需要做任何特殊的事情,因为你的编译器/链接器将使C标准库可用。
如果你想调用由你加载的一个DLL使用的C运行库中的函数,那就是一个问题。 运行时可以静态链接,也可以是多个不同动态运行时之一。
与Linux和类Unix系统不同,Windows没有内置的“自然”编译器工具链,因此没有C库。 每个编译器都必须自己发布。 微软自己的MSVC链接,像msvcrtxxx.dll
这样的动态库(带有一些版本控制; Windows的更新版本附带一些版本); 如果使用GCC进行编译,那么您需要在某个地方为该编译器提供一个C运行库,您需要将其运行(或静态链接到-static-libgcc
)。
同样,没有一个类似于/usr/lib
的中央库存储库或强大的版本控制方案,因此典型的Windows应用程序通常最终将自行设置动态库。
(Windows的核心平台组件是Windows API库,如coreel32.exe
, GDI.exe
和User.exe
,任何具有Windows API标头的C编译器都可以链接到该库)。