在某项目中,有一些静态库,这些静态库中有类型命名的函数GET_XXX。在一次项目结构调整的时候,我想将调用这静态库的代码编译成DLL,并且将这些Get函数导出,我就直接就这些函数前面添加了_declspec(dllexport),
然后代码结构就成为:
静态库A: 包括很多 _declspec(dllexport) GET_XXX 函数。
动态库B:未直接调用 GET_XXX
调用B的应用程序C:动态Load动态库B,然后使用GetProcAddress获取函数地址后使用。
但是很不幸编译出来的中一直没有这些函数。
百思不得其解,最后在网上发现下面的信息(from:http://support.microsoft.com/kb/141459):
When you build a DLL from component libraries (.lib files) that have functions declared with _declspec(dllexport) to export them from the DLL, the functions aren't exported or even included in the DLL.
解决方案:
1、DEF文件或者是在LInk时添加/export:func.
2、在其它地方强引用。
3、把GET等函数所在源码直接放到dll代码里编译。
对于我的工程,1、2不适合,所以我使用了3.
http://www.cnblogs.com/k1988/archive/2013/02/16/2913534.html
http://www.cnblogs.com/k1988/p/3587820.html
C++静态库中使用_declspec(dllexport) 不能导出函数的问题的更多相关文章
-
如何让静态库中的可执行程序不调用的函数不链接进该可执行程序?(-ffunction-sections -Wl,--gc-sections)
关键词: -Wl,--gc-sections -ffunction-sections 链接 elf 库 有时我们会遇到这种情况,可执行程序需要链接一些静态库,但是静态库中的函数并没有全部使 ...
-
iOS 静态库中使用宏定义区分iPhone模拟器与真机---备用
问题描述 一般项目中,可以使用宏定义来判断模拟器还是真机,这无疑是有效的. #if TARGET_IPHONE_SIMULATOR #define SIMULATOR 1 #elif TARGET_O ...
-
在共享DLL中使用MFC 和在静态库中使用MFC的区别
使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC 第一种顾名思义. ...
-
linux C 刚初始化后的一个变量在调用一个静态库中函数后被异常修改为乱码
linux C 中声明并初始化一个变量const char a[512]="test";后,接着调用了一个静态库中的函数函数test(b);,a并没有传入test函数,但在调用这个 ...
-
NSClassFromString 实例话静态库中的类
Class myClass = NSClassFromString("StaticLibyClassName"); StaticLibyClassName是从静态库中实例化一个Cl ...
-
MFC的使用——在共享DLL中使用MFC、在静态库中使用MFC(转)
原文转自 https://blog.csdn.net/albertsh/article/details/52838419 1.使用标准Windows库 使用WINDOWS SDK API库,不使用MF ...
-
plist文件无法打包进.a静态库中
问题: 之前一直在做静态库的编写与维护,也一直知道静态库的图片资源是没办法打进.a中的.可是突然有个想法.由于有非常多參数的配置是在一个plist文件里的.尽管也知道这是一个plist文件,可是想想和 ...
-
在DLL中导出另一静态库中的函数
开发环境: win7_x64.VS2013 应用场景: 动态库A依赖动态库B,而动态库B又使用了静态库C:有些情况下,我们需要将C从B里面导出,然后提供给A使用. 正文: Step1: 1.新建测试静 ...
-
iOS framework静态库中使用xib和图片资源详解
一.新建bundle 前2篇文章介绍了iOS 最新framework和.a静态库制作及使用全解 iOS 工程套子工程,主工程和framework工程或.a library静态库工程联调 我现在是在 ...
随机推荐
-
jquery select取值,赋值操作
select">jquery select取值,赋值操作 一.获取Select 获取select 选中的 text : $("#ddlRegType").find( ...
-
ThinkPHP 3.2.3 文件上传时间目录问题
上传文件的代码如下 在上传文件的时候会默认生成时间目录, 但是有些时候,并不想生成时间目录,而是储存在我们自己定义的目录下,可以这样做: 只需要添加 $upload->autoSub = fal ...
-
latex之设置字体大小
\tiny\scriptsize\footnotesize\small\normalsize\large\Large\LARGE\huge\Huge
-
mysql 有索引没走索引 更新锁全表
Session 1: mysql> select connection_id(); +-----------------+ | connection_id() | +-------------- ...
-
scribefire 多博客管理利器 安装详解
scribefire 多博客管理利器 安装详解 一.ScribeFire介绍 ScribeFire 是 Firefox (火狐浏览器)上著名的博客写作工具,目前已跨平台支持多浏览器(Firefox,C ...
-
CentOS7安装PostgreSQL9.4
这次选择的数据库安装的是run 文件,更容易掌握.这次数据库全是默认安装,如果有需求的可以自行修改一下的. 这是我的第一篇博客,各位观众老爷,如果觉得哪里有什么不好的,可以留言一起探讨,探讨.有什么问 ...
-
微信小程序去除Button默认样式
在小程序开发过程中,使用率蛮高的组件button,因为经常要去除默认样式,然后再自定义样式,所以经常写,自己也总结分享一下简单的实现步骤. (一)实现效果1.实现前(默认样式): 2.实现后(去除默认 ...
-
JDK动态代理源码解析
动态代理.静态代理优缺点 关于JDK的动态代理,最为人熟知的可能要数Spring AOP的实现,默认情况下,Spring AOP的实现对于接口来说就是使用的JDK的动态代理来实现的,而对于类的 ...
-
c#List数组移除元素
; i >= ; i--) //移除已经订阅的患者 { if (AllPatientsEntities[i].姓名 == item.患者姓名) AllPatientsEntities.Remov ...
-
Grinder搭建小记与Nduja(这次不待续了)
Grinder是比较有名的浏览器FUZZ框架,采用ruby语言编写,主要是作为测试框架来使用,在<白帽子讲浏览器安全>一书中作者使用了Nduja生成测试样本来配合Grinder使用.根据网 ...