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