一些VC生成动态链接库的问题记载(不断更新中)
发布日期:2021-10-16 12:05:14 浏览次数:22 分类:技术文章

本文共 839 字,大约阅读时间需要 2 分钟。

  • 动态链接库编译成功后,主函数的调用报错

错误:error   LNK2001:   unresolved   external   symbol   __imp__??

这一般是函数前面的__declspec(dllexport)和_declspec(dllimport) 没有定义好。具体的做法:

头文件中:

#ifdef LIBAV3_EXPORTS

#define libav3_API  __declspec(dllexport)
#else
#define libav3_API  __declspec(dllimport)
#endif
 libav3_API int AV3EncClose(AV3EncFramePtr hEncoder);

dll文件中:

 libav3_API int AV3EncClose(AV3EncFramePtr hEncoder)

{

 

}

  •  主函数调用DLL,DLL中有fwrite的,会死掉

一般这种情况是主函数定义指针,在dll进行了写操作,这就需要在建立主函数的时候,一定要

把工程文件建立成“use MFC in a shared DLL”的类型。

 

  •  libc.lib和 MSVCRTD.lib冲突的问题

主函数调用编译时会报LINK2005的error,说一些函数在libc.lib和在MSVCRTD.LIB中的定义冲突。在网上搜索了很多资料,大家都是说不是ignor这个,就是ignor那个。后来仔细分析了一些,libc.lib是调用静态库是需要使用的,而MSVCRTD.lib是调用静态库时需要使用的。而二者同时有许多重复定义的函数,就会导致冲突。所以得出结论是?在vc6.0里是不能同时调用动态库和静态库的。把库函数都改成静态库。问题就解决了。

 

 

  • dll找不到,因此这个应用程序未能启动

         在执行主函数的时候,会报下面的错,找不到dll。

 

 

 

 经过试验,将生成的dll拷贝到主函数的debug下面,就不会报错了。可能vc对于这种指向性的dll调用有问题。

转载地址:https://blog.csdn.net/snowbabybw/article/details/6110041 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:BCB与VC的一些区别(不断更新中)
下一篇:一个 autoconf / automake 例子 --- 静态库、动态库 多源文件

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月07日 12时28分30秒