当我与某个 c++ 库链接时,对于每个 *.lib,它都与一个 *.exp 文件相关联。*.exp 有什么作用?
***.lib / ***.exp
当我与某个 c++ 库链接时,对于每个 *.lib,它都与一个 *.exp 文件相关联。*.exp 有什么作用?
***.lib / ***.exp
导出 (.exp) 文件包含有关导出函数和数据项的信息。当 LIB 创建一个导入库时,它也会创建一个 .exp 文件。当您链接一个程序,该程序直接或间接地从另一个程序导出和导入时,您将使用 .exp 文件。如果您使用 .exp 文件链接,LINK 不会生成导入库,因为它假定 LIB 已经创建了一个。
您可以使用带有 /DEF 选项的 LIB 来创建导入库和导出文件。LINK 使用导出文件来构建一个包含导出的程序(通常是动态链接库 (DLL)),并使用导入库来解析对其他程序中这些导出的引用。
请注意,如果您在初步步骤中创建导入库,则在创建 .dll 之前,您必须在构建 .dll 时传递与构建导入库时相同的一组目标文件。
在大多数情况下,您不需要使用 LIB 来创建导入库。当您链接包含导出的程序(可执行文件或 DLL)时,LINK 会自动创建一个描述导出的导入库。稍后,当您链接引用这些导出的程序时,您指定导入库。
但是,当一个 DLL 导出到一个它也直接或间接从中导入的程序时,您必须使用 LIB 创建一个导入库。当 LIB 创建一个导入库时,它也会创建一个导出文件。链接其中一个 DLL 时必须使用导出文件。
从MSDN:
导出 (.exp) 文件包含有关导出函数和数据项的信息。当 LIB 创建一个导入库时,它也会创建一个 .exp 文件。当您链接一个程序,该程序直接或间接地从另一个程序导出和导入时,您将使用 .exp 文件。如果您使用 .exp 文件链接,LINK 不会生成导入库,因为它假定 LIB 已经创建了一个。有关 .exp 文件和导入库的详细信息,请参阅使用导入库和导出文件。