Qt - Qt调用VS生成的C静态库

1,生成dll和lib库

在vs2010中新建工程,在向导中选择DLL,如下图所示:

新建两个文件mydll.h和mydll.c

mydll.h代码如下:

 1 #ifndef MYDLL_H
 2 #define MYDLL_H
 3 #ifdef __cplusplus //
 4  extern "C"{
 5  #endif
 6  __declspec(dllexport) int myFun(int a,int b);
 7
 8 #ifdef __cplusplus
 9  }
10  #endif
11
12 #endif

mydll.c代码如下:

1 #include "mydll.h"
2 #include <stdio.h>
3
4 int myFun(int a,int b)
5 {
6     printf("myFun is called");
7
8     return a+b;
9 }

编译运行,在Debug目录下可看到下述文件:

2.在Qt中调用dll和lib库

新建Qt工程LibTest2,将mydll.h文件添加到当前工程中;将mydll.lib和mydll.dll文件复制到工程所在目录;

在LibTest2.pro右键导入外部库,参数选项如下图所示:

在mainwindow.cpp中包含“mydll.h”

在构造函数中添加下述代码:

   int test;
      test = myFun(33,33);

      qDebug()<<test;

编译运行,结果如下:

可以看到C静态库已被调用。

时间: 2024-08-25 00:50:51

Qt - Qt调用VS生成的C静态库的相关文章

Qt 5.6 5.8 vs2015 编译静态库版本(有全部的截图)good

安装Qt 去Qt官网下载Qt安装包  安装Qt和源码,一定要勾选source选项  添加bin到系统变量  工具 需要python3和 perl. vs2015 第三方工具,到官方下载安装  在命令行测试工具是否安装成功  configue 首先修改文件C:\Qt\Qt5.6.2\5.6\Src\qtbase\mkspecs\common\msvc-desktop.conf 把MD替换为MT静态编译  然后上面打开的终端cd命令跳到Qt源码目录 ,输入下面命令 5.6 configure -co

Linux下Gcc生成和使用静态库和动态库详解

参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同(主要是编译器.汇编器和连接器的不同),因此二者库的二进制是不兼容的. 本文仅限于介绍linux下的库. 1.2库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同

【转】Linux下gcc生成和使用静态库和动态库详解

一.基本概念 1.1 什么是库 在Windows平台和Linux平台下都大量存在着库. 本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同(主要是编译器.汇编器和连接器的不同),因此二者的库的二进制是不兼容的. 本文仅限于介绍linux下的库. 1.2 库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同. 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大. 共享库的代码是在可

Qt Creator调用VS2008生成的DLL注意事项 good

问题:生成的dll文件QT无法静态/隐式调用 分析:调用的lib库可能是msvc编译的,而我用Qt调用,Qt默认编译器是minGW,两种编译器生成的函数名不一样,所以调用的时候你要用哪个函数,编译结果肯定显示这个函数未定义! 解决1:用VS2008生成DLL文件时,采用__declspec方式导出函数,不要使用def模块文件,这时dll中的函数名称[email protected]规则命名 解决2:函数的调用约定改为__cdecl 导出函数的调用约定和使用这个函数时声明的调用约定必须一致,否则程

cmake windows 生成的目标静态库 会自动添加一个Debug 目录 [ 工具平台

http://baozoumanhua.com/users/17227716/talkingshttp://baozoumanhua.com/users/17227716/following_articleshttp://baozoumanhua.com/users/17227716/articleshttp://baozoumanhua.com/users/17227776http://baozoumanhua.com/users/17227776/forum_articleshttp://b

Qt不同版本编译器,调用VC++生成的动态链接库

今天用QT编译生成的共享库自己却怎么都不能调用,查了N久后找到这个帖子,发现搞定了,记录一下 http://qiusuoge.com/12720.html Qt如何调用VC++生成的动态链接库?假设当前有VC++编译器生成的动态库文件testdll.h,testdll.lib和testdll.dll. testdll.h文件源码如下: #ifdef TESTDLL_EXPORTS #define TESTDLL_API __declspec(dllexport) #else #define TE

iOS中静态库-.a文件生成和使用

最近在使用使用一个网上的Demo的时候. 出现另一令人烦恼的问题 . 就是它里面有嵌套的工程. 如下图所示. 工程里面还嵌套有一个工程. 真的是让人煞费苦心 …其实这个问题看起来并不是很难, 如果是一般的工程的话, 解决方法有两种: 我可把嵌套工程里面的文件拖拽出来. 修改一些属性什么的应该可以使用了 还有一种方法就是我把嵌套里面的工程整个生成一个静态库文件.把我需要使用的文件的.h暴露出来使用.但是这个工程比较奇葩. 他里面是c++de一些文件. 如果直接拖拽的话会有各种引用文件错误的问题.

Linux下静态库生成和使用

Linux下静态库生成和使用 一.静态库概念 1.库是预编译的目标文件(object  files)的集合,它们可以被链接进程序.静态库以后缀为”.a”的特殊的存档(archive file)存储. 2.标准系统库可在目录/usr/lib与/lib中找到.比如,在类Unix系统中C语言的数序库一般存储为文件/usr/lib/libm.a.该库中函数的原型声明在头文件/usr/include/math.h中. 3.C标准库本身存储为/usr/lib/libc.a,它包含ANS1/ISO标准指定的函

通用静态库的生成,使用lipo将两个.a文件合并成一个

百度地图.支付宝用到过将2个.a文件合并 通用静态库的生成 打开命令行 (终端) 输入: lipo -create 然后依次把两个.a文件拖到终端窗口, 命令行会变成这样: lipo -create /Library/SDKs/CorePlotSDK/iphoneos.sdk/usr/lib/libCorePlot.a /Library/SDKs/CorePlotSDK/iphonesimulator.sdk/usr/lib/libCorePlot.a 然后接着输入 -output 目标文件路径