minGW 编译的DLL问题
/*输入输出宏定义*/
#ifndef VMF_EXPORTS
#define VMF_API _declspec(dllimport)
#else
#define VMF_API _declspec(dllexport)
#endif
/*调用方式宏定义*/
#ifndef FUNC_INVOKE_MODE
#define VMF_INVOKE_MODE _stdcall
#else
#define VMF_INVOKE_MODE _cdel
/*导出函数声明*/
#ifdef __cplusplus
extern "C"
{
#endif
VMF_API int VMF_INVOKE_MODE VMF_Initialize(const char*);
#ifdef __cplusplus
};
#endif
使用 --kill-at 进行编译后,利用dependency查看dll导出的函数均为干净的函数名,即导出名称为VMF_Iniialize.
二、利用codeblocks新建一个console application,在向导过程中选择C++ 语言,然后将上述动态库的导出函数声明的头文件包含进来,并且链接路径均设置正确,但是在调用dll中的VMF_Initialize时,编译错误:无法链接的VMF_Initialize@4,
原因本人清楚:C++对dll中的导出函数声明进行了名在改编,导致链接错误!但目前还没有好的解决办法!
望各位大虾不吝赐教!感激不敬!
相关推荐
MINGW缺少的DLL文件
运行MINGW缺少的文件
liblto_plugin-0.dll
该文件是MinGW编译时可能报错缺少的一个文件,下载该文件后将其放在C:\MinGW\libexec\gcc\mingw32\xxx目录下(xxx是你的g++版本号)即可
MingW VC 之.a .lib .dll .def 关系
MSVC vs. MinGW 之 (lib,dll,def,obj,exe) vs (a,dll,def,o,exe) 玩转攻略手记 一份粗糙的研究记录,有待补完和整理。 MinGW: c -> o gcc -c a.c c -> exe gcc a.c libs.o -o a.exe (从主程序a.c,附加libs,生成a.exe) o -> exe gcc a.o b.o ... -o main.exe c -> dll,def,a gcc a.c -shared -o a.dll -Wl,--output-def,a.def,--out-implib,liba.a a -> dll a2dll liba.a dll -> a: dlltool --dllname a.dll --def a.def --output-lib liba.a (需要def文件) a -> def: dumpbin /exports lib.a > lib.def (在windows上调用,def需要修改) dll -> def : pexports a.dll -o > a.def (这里的-o是指给函数标序号) lib -> def : reimp -d a.lib lib -> a: (for __cdecl functions in most case) reimp a.lib; (for __stdcall functions) MSVC: c -> lib cl /LD a.c (注意已经定义了export列表) c -> dll cl /LD a.c c -> obj cl /c a.c c -> exe cl a.c /out:a.exe dll ->lib lib /machine:ix86 /def:a.def /out:a.lib (需要def文件) obj ->lib lib a.obj b.obj... /out:mylib.lib dll ->def DUMPBIN a.dll /EXPORTS /OUT:a.def (生成的def需要做修正) lib ->def reimp -d a.lib (这个要在MSYS+MinGW下用) 关于这些工具的适用范围可以很容易的理解和记忆。 dll和exe都是PE文件,所以可以使用pexports. lib和a是静态库文件,都是归档类型,不是PE格式。所以不能使用pexports. dll可以使用dlltool. lib可以使用lib, 和reimp(lib->a工具) 所有的bin文件,包括dll,exe,lib,a都可以使用dumpbin. 参考: http://hi.baidu.com/kaien_space/blog/item/5e77fafa2ba9ff16a8d3110a.html Mingw官网文档: http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs http://oldwiki.mingw.org/index.php/CreateImportLibraries http://www.mingw.org/wiki/FAQ http://hi.baidu.com/opaquefog/blog/item/9b21b6deb324e25dccbf1ab7.html http://qzone.qq.com/blog/8330936-1238659272 http://hi.baidu.com/jzinfo/blog/item/b0aa1d308de99f9da8018e00.html 本篇测试用代码: 1. main.cpp #include #include #include "mylib.h" using namespace std; int main() { char str[]="Hello world!"; printhello(str); return 0; } 2. mylib.cpp #include #include #include "mylib.h" using namespace std; void EXPORT printhello(char *str) { cout << str << endl; } 3. mylib.h #define EXPORT __declspec(
hello_mingw_msvc_dll
用mingw编译VC所需的dll,lib例子程序
编译opencv4.5.2缺少opencv_videoio_ffmpeg.dll等文件与编译完成的mingw64与mingw32
内有编译缺少的opencv_videoio_ffmpeg_64.dll、opencv_videoio_ffmpeg.dll、ffmpeg_version.cmake、以及编译好的mingw64与mingw32版本


工具平台和程序库
