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

    2024年02月17日
    浏览(38)
  • 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日
    浏览(32)
  • 动态链接库dll详解

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

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

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

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

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

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

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

    2024年02月08日
    浏览(37)
  • 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日
    浏览(33)
  • 【已解决】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日
    浏览(30)
  • Rust:使用libloader调用动态链接库 (DLL)

    掘金为同人创作:掘金 最近需要使用Rust 动态调用 动态链接库,本来打算是使用 libloading 的,但是 libloading 在调用dll中的函数的时,是必须要在编译时确定参数和return的类型的。但后来发现了 libloader 这个包包, libloader 是基于 libloading 的,但是操作起来却比 libloader 方便。

    2023年04月10日
    浏览(40)
  • 以动态库链接库 .dll 探索结构体参数

    Dev c++ C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客  在写dll 插件中发现的函数指针用途和 typedef 的定义指针的用法-CSDN博客 两步之后,尝试加入结构体实现整体数据使用。 注意结构体 Ak 是相同的 代码如下 DLL文件有两个,dll.dll是上面提到的链接里的 dllv2.dll是这个代

    2024年04月12日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包