5231|11

59

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

应用程序链接库失败 [复制链接]

各位达人,小弟的情况是这样的:

    我在OS下创建了两个Subproject,一个叫libosd生成Dll,导出一些接口用于动态加载,另一个叫libosd_test,即前面Dll的测试程序,我将前面DLL生成的libosd.lib和需要用到的头文件libosd.h拷贝到libosd_test的本地目录下,并在source文件中加入了该库,但是编译链接的时候,就是提示“无法解析的外部符号(libosd导出的API接口)”。请问,有哪位朋友遇到过类似的问题,如何解决?谢谢不吝赐教!

最新回复

问题已经解决,结贴拉!  详情 回复 发表于 2010-1-22 15:32
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
API接口函数声明前需要加上extern "C"
最好在libosd.h中使用
#ifdef __cplusplus
extern "C" {
#endif

API函数接口

#ifdef __cplusplus
}
#endif
以上方法也许管用。
 
 

回复

81

帖子

0

TA的资源

禁止访问

板凳
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
友情+职业+学习帮顶!
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
加库的时候用的是TARGETLIBS还是SOURCELIBS?这两个是有区别的
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 veabol 的回复:
加库的时候用的是TARGETLIBS还是SOURCELIBS?这两个是有区别的

请教,什么区别?一直很困惑!
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 fjx1982441 的回复:
引用 4 楼 veabol 的回复:
加库的时候用的是TARGETLIBS还是SOURCELIBS?这两个是有区别的

请教,什么区别?一直很困惑!

TARGETLIBS,如果一个库以DLL的形式提供给调用者,就需要用TARGETLIBS,它只链接一个函数地址,系统执行时会将被链接的库加载。比如coredll.lib就是这样的库文件。即动态链接。

SOURCELIBS,将库中的函数实体链接进来。即静态链接,用到的函数会在我们的文件中形成一份拷贝。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
SOURCELIB与TARGETLIB虽然有区别,但即使写反了也能链接过,CE对这个要求并不严。应该还是export时有问题,你查一下有没有export出那个函数
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

9
 
这个可以用dumpbin
命令行工具
查看一下libosd.lib
是否成功的导出了
所需的函数接口吧
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

10
 
帮顶下。

MARK。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

11
 
LZ有没有使用.def导出接口?
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
问题已经解决,结贴拉!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表