使用implib与coff2omf创建DLL导入库的区别是什么?
调用其他编译器编译的DLL?C++ Builder自带工具帮你搞定!
刚好对这个场景很熟悉,C++ Builder自带两款实用工具,专门用来解决调用其他编译器(比如Visual Studio)编译的DLL的问题,给你理清楚整个逻辑:
常规调用DLL的方式
- 通常使用DLL里的导出函数时,会搭配对应的导入库(.lib/.a等)和头文件,在编译和链接阶段直接引用,能省不少事;
- 当然也可以选择动态加载DLL:用
LoadLibrary()加载DLL,再通过GetProcAddress()获取函数地址,这种方式不需要导入库,但写起来会繁琐一些。
跨编译器的痛点:导入库格式不兼容
如果你的DLL是用Visual Studio这类其他编译器编译的,它生成的导入库是COFF格式的,而C++ Builder识别的是OMF格式的导入库,直接用会报错。这时候就轮到C++ Builder自带的工具上场了:
1. coff2omf.exe
这款工具的核心作用就是把COFF格式的导入库转换成C++ Builder能识别的OMF格式。使用起来很简单,命令行里敲:
coff2omf.exe input_coff_lib.lib output_omf_lib.lib
转换完成后,你就可以像用原生导入库一样,把这个OMF格式的库加到C++ Builder的项目链接设置里,配合头文件正常调用DLL函数了。
2. implib.exe
如果手里只有DLL文件,没有对应的导入库,还可以用implib.exe直接从DLL生成OMF格式的导入库。命令格式大概是:
implib.exe generated_lib.lib your_dll.dll
这样就能快速生成适配C++ Builder的导入库,不用再折腾跨编译器的格式问题。
内容的提问来源于stack exchange,提问作者Totte Karlsson
相关产品推荐
相关产品推荐

