关于静态库调用其他静态库的问题

不会打麻将 2017-09-22 10:22:48
比如说zlib.lib,在做VS2010里的一个项目的时候要引用它。
但是zlib.lib设置很繁琐,需要对项目属性进行设置,忽略libcmt.lib这个默认库否则会起冲突(当时也是查了好多资料才让zlib正常工作)
现在在自己做项目,里面要调用zlib,我是想通过单独给zlib加一个套的方法,使之能达到不需要对项目属性进行任何设置、只要引入lib和对应的头文件就可以使用的程度,就自己又做了个静态库zlibtool.lib,对这个静态库的项目属性进行设置,然后把zlib库里最有用的两个函数compress和uncompress作为这个静态库的唯二的函数。。
但是做完后把zlibtool.lib和h文件放在自己项目中后,编译总是出现无法定义的符号错误,所以这是为什么呢?

PS. 问题似乎可以简化成
静态库ZLIB和静态库1,静态库1引用静态库ZLIB,然后项目引用静态库1(没引用ZLIB),出现无法定义符号错误……
...全文
2972 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdghchj 2017-09-30
  • 打赏
  • 举报
回复
编译静态库时貌似只有编译过程,没有链接过程,并不会把其它依赖静态库里的代码转过来,只是简单的将编译后的中间文件打包。 要真正等编译动态库或可执行程序时才会去链接依赖库。
bravery36 2017-09-30
  • 打赏
  • 举报
回复
静态库很烦的,建议用动态库或者直接源码编译。 最终一个exe简单,用点什么工具打包在一起就好。
酱油党 2017-09-30
  • 打赏
  • 举报
回复
zlib我记得是有源码的,你直接当成一个有源码的库放在你的工程下用不就行了。你说的问题一般都是编译库的时候编译选项不一致导致的。
stendson 2017-09-30
  • 打赏
  • 举报
回复
1. 出现无法定义的符号错误 这表明链接阶段找不到函数的定义,在zlibtool.lib中没有导出你需要的函数;最简单的测试方法是将zlibtool做成动态链接库,用depends查看导出的函数。我怀疑是在导出函数时没有加上 extern “C” 标记,由于C++符号表的原因导出函数不是原函数 2. 同时引用zlib.lib和zlibtool.lib 因为zlibtool.lib在编译阶段已经将zlib.lib所有函数编译到静态库的地址空间,因此原来在zlib.lib库中的所有函数在zlibtool.lib库中都有一份定义,在调用其中任何一个库里的函数时,链接阶段都会出现函数重复定义的编译错误
赵4老师 2017-09-26
  • 打赏
  • 举报
回复
全部使用动态库。
不会打麻将 2017-09-26
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
全部使用动态库。
不想用动态库 因为最后出来的项目只想有一个可执行文件的
不会打麻将 2017-09-26
  • 打赏
  • 举报
回复
引用 3 楼 earbao 的回复:
你还是需要链接到zlib静态库,他在链接为可执行文件时进行符号消解。

似乎同时引用会
yunshouhu 2017-09-23
  • 打赏
  • 举报
回复
你还是需要链接到zlib静态库,他在链接为可执行文件时进行符号消解。
www_adintr_com 2017-09-22
  • 打赏
  • 举报
回复
静态库引用其它库并不会在编译的时候把引用的库函数编译到生成的 lib 中
Saleayas 2017-09-22
  • 打赏
  • 举报
回复
静态库是不需要引用其他的库的。 所以在最终的可执行项目的时候,(.exe 和 .dll)的时候,需要引用所有的库。 如果你需要封装,使用动态库。

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧