VS 链接问题 warning C4273: dll 链接不一致

这篇具有很好参考价值的文章主要介绍了VS 链接问题 warning C4273: dll 链接不一致。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

VS 链接问题 warning C4273: dll 链接不一致

今天使用 VS2015 编译程序,突然发现一个链接问题

warning C4273: dll 链接不一致

查了一下,原来这是由于 Windows DLL 动态库的导入导出不匹配造成的。在使用 VS2015 编写 DLL 程序时,头文件中必须使用 __declspec 进行声明: 在提供者那里方法应该被声明为 __declspec(dllexport),在使用者那里方法应该被声明为 __declspec(dllimport) 。当然 Linux 中没有这个问题。

造成这个告警的原因是:生成 DLL 时只使用了 __declspec(dllexport) ,但在调用时未使用 __declspec(dllimport) 进行声明:

  • __declspec(dllexport) 导出库文件标志,没有这个标志,无法生成 *.lib 文件,只能在库文件本身的工程中使用。
  • __declspec(dllimport) 导入库文件标志,给外部调用者使用的,没有这个标志,外部调用者会找不到库文件中指定的符号。

所以经常可以在 Windows DLL 的头文件中看到如下宏定义,就是为例解决这个问题的

#ifdef _WIN32
#ifdef LIBRARY_EXPORTS
#define API_EXPORTS __declspec(dllexport)
#else
#define API_EXPORTS __declspec(dllimport)
#endif
#else
#define API_EXPORTS
#endif

class API_EXPORTS ClassName {
    // ...
};

在 Windows 中,DLL 生成方需要定义 LIBRARY_EXPORTS 宏,而 DLL 调用方则不需要定义这个宏,这样就可以解决生成方和调用方导出和导入的问题。在 Linux 中,这个宏定义没有任何作用。

当然,若是以 C 语言的形式导出 API,还需要 extern "C" 进行声明,如下所示

extern "C" API_EXPORTS unsigned long long fibonacci(const int n);

参考资料文章来源地址https://www.toymoban.com/news/detail-404090.html

  1. Walkthrough: Create and use your own Dynamic Link Library (C++)

到了这里,关于VS 链接问题 warning C4273: dll 链接不一致的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • QT运行exe遇到Qt5Core.dll等dll文件缺失及无法定位程序输入点于动态链接库问题解决方法

    QT运行exe遇到Qt5Core.dll等dll文件缺失及无法定位程序输入点于动态链接库问题解决方法

    QT运行exe相关问题解决方法, 保姆级 ,亲测有效! 如果运行exe文件出现的问题如下图所示,这是由于安装路径缺失相应的dll导致的。(其他dll文件缺失解决方法同理) 解决方法: 在自己下载下来的文件中寻找相应的dll文件并复制到安装路径中。以我自己为例: 在上图的路

    2024年02月17日
    浏览(8)
  • OpenCV(vs)安装与配置环境,以及找不到opencv_world460.dll的问题

    OpenCV(vs)安装与配置环境,以及找不到opencv_world460.dll的问题

    目录 一、opencv官网下载 二、配置 1.vs新建一个C++项目 ​编辑   2. 找到属性管理器  3. 开始添加  4. 测试 三、关于找不到opencv_world460.dll(或者其他版本)的问题 官网下载地址: https://opencv.org/releases/ 解决方案配置选择Release,解决方案平台选择x64 vs2019版本步骤:视图---其他窗

    2024年02月09日
    浏览(52)
  • 动态链接库dll详解

    动态链接库dll详解

        DLL就是整个Windows操作系统的基础。动态链接库不能直接运行,也不能接收消息他们是一些独立的文件。     Windows API中的所有函数都包含在DLL中。     其中有三个最重要的DLL     kernel32.dll ,它包含用于管理内存、线程和进程的各个函数;     User32.dll ,它包含用于执行

    2024年02月06日
    浏览(10)
  • Python调用动态链接库(DLL)

    Python调用动态链接库(DLL) 动态链接库(Dynamic Link Libraries,简称DLL)是一种被多个程序共享的库文件,可以被用于将程序分解为小模块,减少内存占用,加快程序运行速度。而Python作为一种高级编程语言,可以方便地调用外部的DLL文件。 在Python中,可以使用ctypes模块来调用

    2024年02月13日
    浏览(11)
  • LabVIEW调用动态链接库DLL

    LabVIEW调用动态链接库DLL

    LabVIEW调用动态链接库DLL 要调用DLL,首先必须确定该库是C/ C ++ DLL还是Microsoft .NET Assembly / .NET DLL。 若要确定具有哪种类型的库,可以检查DLL文件的可移植可执行(PE)标头。 DLL 是 C/ C ++ DLL : 1.       如果没有头文件,请查找头文件(* .h)或函数原型定义,请跳

    2024年02月03日
    浏览(9)
  • 如何查看.dll文件函数接口?(DLL动态链接库)(查看动态链接库、查看接口、查看函数)(Visual Studio的dumpbin工具)(Dependency Walker)

    如何查看.dll文件函数接口?(DLL动态链接库)(查看动态链接库、查看接口、查看函数)(Visual Studio的dumpbin工具)(Dependency Walker)

    查看DLL(动态链接库)文件的接口,通常需要使用一些专门的工具。这里有两个比较常见的方法: Dependency Walker 使用Dependency Walker:Dependency Walker是一个免费的实用工具,可以列出DLL文件中的所有导出函数以及它们可能依赖的其他DLL。只需在Dependency Walker中打开想查看的DLL文件

    2024年02月08日
    浏览(15)
  • Java JNA调用dll动态链接库

    Java JNA调用dll动态链接库

    记录学习内容 C编译dll环境:         IDE:Clion         ToolChains:MinGW64 Java环境:         版本:jdk1.8 64位         JNA依赖版本:5.2.0 (可根据需要升级,本文以此版本为例) JNA(Java Native Access )提供一组Java工具类用于在运行期间动态访问系统本地库(native library:如W

    2024年02月12日
    浏览(7)
  • 【已解决】Ubuntu 20.04 编译OpenCV 动态链接库指向版本不一致导致出错

    【已解决】Ubuntu 20.04 编译OpenCV 动态链接库指向版本不一致导致出错

    问题:编译OpenCV 4.8.1, 显示出错: /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to `ffi_type_uint32@LIBFFI_BASE_7.0\\\' /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to `ffi_type_sint32@LIBFFI_BASE_7.0\\\' /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to

    2024年02月04日
    浏览(16)
  • [python] 罗技动态链接驱动库DLL 控制 键鼠

    [python] 罗技动态链接驱动库DLL 控制 键鼠

    最近在玩搬砖游戏晶核, 每天有很多重复繁琐的\\\"打卡\\\"操作, 得知隔壁御三家游戏就有大佬做了自动收割的辅助工具,我就想模仿写一个. 不过大佬们写的开源工具厉害得多,加了神经网络自动识别,实现寻路和点击功能.我目前最多就是实现一个简单连点器加色块识别而已,而且这种

    2024年02月19日
    浏览(29)
  • 前端(node.js)调用dll动态链接库

    使用 js node 调用dll 动态链接库. github地址如下,包含dll,里面就一个Add方法暴露出来 github Windows 11 22H2 node v16.20.0 Python 3.11.2 需要安装这俩库 ffi-napi app.js 第一种不好使,曲线救国的方式这个是。 python-shell app.js python

    2024年02月16日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包