社区
C++ 语言
帖子详情
有点急,本来以为没问题的,问一个静态lib的问题
QQ_370566617
2006-10-05 05:12:35
使用VC6
h中这样定义
#ifndef __H_
#define __H_
namespace h
{
void fun();
}
#endif
在cpp中
using namespace h
void fun()
{
}
产生的一个静态lib库
在另一个工程中加入这个库,
并且包含头文件
这样使用
h::fun();
但是编译却说:
error LNK2001: unresolved external symbol
...全文
246
7
打赏
收藏
有点急,本来以为没问题的,问一个静态lib的问题
使用VC6 h中这样定义 #ifndef __H_ #define __H_ namespace h { void fun(); } #endif 在cpp中 using namespace h void fun() { } 产生的一个静态lib库 在另一个工程中加入这个库, 并且包含头文件 这样使用 h::fun(); 但是编译却说: error LNK2001: unresolved external symbol
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hailongchang
2006-10-06
打赏
举报
回复
你所说的lib可以分为两种情况:
1:这个lib是一个静态库,在这种情况下,链接器并不是把整个lib都包含进去,其实只是把你需要的函数给包含进去了,所以这种情况对dll大小的影响非常小.举个例子,你机器上的的MFC静态版本
NAFXCW.LIB大小有16M之多,但是你随便写一个MFC静态链接的程序,可以看到你的最终可执行文件并没有大于16M
2:这个lib是一个dll的导入库,这种情况就如楼上所说的那样,代码在各自的dll中,所以最终大小也不会很大.
============================
dll就没有继承性吗?
比如A中加入了lib
B.dll继承了A.dll 就不用加入lib了?
============================
一个lib,其实只是告诉链接器代码中未定义的符号在lib中能有个合理的"解释"(对于静态lib,就是在lib中已经有这个符号的定义,对于dll的lib,只是告诉链接器哪个dll中有这个符号的定义),
也就是说lib本身是与你写的程序分离的,它只是在链接过程中起点作用,既然是分离的东东,就不能要求在你的代码中有继承性
A中加入了lib,那么B中要想使用这个函数或变量,可以在A中把该函数或变量导出,那么在B中就可以使用了.
qtext
2006-10-05
打赏
举报
回复
一个Dll中引用另一个Dll中的函数,此DLL只增大很小一点点,因为代码是放在各自的dll中,很多输入库(lib),加入一个DLL工程中并不会使此DLL增大很多,link时并不是把输入库的内容放入EXE中,它只是为LINK提供信息。
QQ_370566617
2006-10-05
打赏
举报
回复
※※※※※※※※※※※※※※※※※※※※
还有个问题
如果有n个互相依赖的dll工程(比如A依赖与B),分别用到一个lib中的函数,变量等等
每个dll是不是都要吧lib加进去
这样岂不是让的dll越来越大
dll就没有继承性吗?
比如A中加入了lib
B.dll继承了A.dll 就不用加入lib了?
hailongchang
2006-10-05
打赏
举报
回复
这个带名字空间的全局变量放在h中还是cpp中
放在.h中和放在.cpp中是一样的,但是放在.h中可以给用户使用,否则一般用户无法知道你这个变量是导出的.
使用的时候还要extern吗?
要
qtext
2006-10-05
打赏
举报
回复
变是一般都在cpp中定义,使用时要用extern 声明。
QQ_370566617
2006-10-05
打赏
举报
回复
还有个问题想问
在lib中想放个变量
不是static的
希望如果有名字就使用名字的
这个带名字空间的全局变量放在h中还是cpp中
使用的时候还要extern吗?
qtext
2006-10-05
打赏
举报
回复
你的fun要放在namespace中
namespace h
{
void fun()
{
.....
}
}
A
没
问
题
,B
没
问
题
,A+B却出
问
题
了
A指的是,我处理C/C++
静态
库
lib
文件,将其加载到内存,分析其二进制格式,提取其中的各种数据信息(obj,段(Section),符号(Symbol),重定位(Relocation),字符串表(StringTable) 等)。 B指的是,我读入
LIB
文件,改写和调整其中的部分数据,再写出新的
LIB
文件。在改写数据之前,要先加载并分析,重用A是很自然的事情。 A这一部分...
golang
静态
编译及编译失败排查步骤
golang的
静态
编译介绍以及当编译失败提示:cannot find -lxxx: No such file or directory的时候,要如何排查以及解决
问
题
。
静态
编译Qt5.4.1和Qt WebKit
图灵社区文章地址:http://www.ituring.com.cn/article/195148 WebKit是个好东西,做爬虫、显示网页还是想用HTML来做桌面应用的界面都可以用他,不过一直以来都觉得自己编译webkit费力不讨好,所以都是用的qt官方编译好的,至于
静态
编译webkit,我之前一直以为是根本不可能的。后来看qt forum上说其实是可以的,不过是因为开源协议的
问
题
qt
mysql
静态
vc_vc++2013中使用MySQL connector/C++ 1.1.4
静态
链接报错
包含头文件#include #include #include #include #include #ifdef _DEBUG#pragma comment(
lib
, "mysqlcppconn.
lib
")#else#pragma comment(
lib
, "mysqlcppconn-static.
lib
")// 我的MySQL connector/C++是自己下源码编译的,需要引入这个,官方直接...
iOS
静态
库,动态库与 Framework 浅析
静态
库与动态库的区别 首先来看什么是库,库(
Lib
rary)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用。 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件。另外一种情况是,对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库,因为库是已经编译好的二进制了,编译的时候只需要
C++ 语言
64,652
社区成员
250,508
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章