warning LNK4221: 此对象文件未定义任何之前未定义的公共符号,因此任何耗用此库的链接操作都不会使用此文件

coco123fdsg 2013-01-22 11:05:12
1>------ 已启动全部重新生成: 项目: base, 配置: Debug Win32 ------
1> JGEQtree.cpp
1> AAAAAA.cpp
1> 正在生成代码...
1>AAAAAA.obj : warning LNK4221: 此对象文件未定义任何之前未定义的公共符号,因此任何耗用此库的链接操作都不会使用此文件
1> base.vcxproj -> C:\Users\jim\Desktop\新建文件夹\Debug\base.lib
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========

请问这个警告是什么意思

目录结构


代码
jgeUtil.h
#ifndef __JGE_UTIL_H__
#define __JGE_UTIL_H__

#include <memory>

#endif


JGEQtree.h
#ifndef __JGE_QTREE_H__
#define __JGE_QTREE_H__

#include "jgeUtil.h"

#endif


JGEQtree.cpp
#include "JGEQtree.h"


AAAAAA.h
#ifndef __AAAAAA_H__
#define __AAAAAA_H__

#include "jgeUtil.h"

#endif


AAAAAA.cpp
#include "AAAAAA.h"
...全文
1549 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-01-23
  • 打赏
  • 举报
回复
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
lee_鹿游原 2013-01-23
  • 打赏
  • 举报
回复
蛋疼的问题,谷歌一下试试
coco123fdsg 2013-01-23
  • 打赏
  • 举报
回复
顶起
coco123fdsg 2013-01-23
  • 打赏
  • 举报
回复
引用 13 楼 lile1234_show 的回复:
引用 12 楼 coco_jim 的回复:引用 10 楼 coco_jim 的回复:引用 9 楼 lile1234_show 的回复:MSDN: 错误消息 链接器工具警告 LNK4221 未找到公共符号;存档成员将不可访问 向库添加了不具有公共符号的 .obj 文件。对象中的符号在后面的包括 .lib 的链接器操作中将不可访问。 若要解决此警告,请不要将不具有公共……
非常感谢,我再看下编译连接的各个阶段。
lee_鹿游原 2013-01-23
  • 打赏
  • 举报
回复
引用 12 楼 coco_jim 的回复:
引用 10 楼 coco_jim 的回复:引用 9 楼 lile1234_show 的回复:MSDN: 错误消息 链接器工具警告 LNK4221 未找到公共符号;存档成员将不可访问 向库添加了不具有公共符号的 .obj 文件。对象中的符号在后面的包括 .lib 的链接器操作中将不可访问。 若要解决此警告,请不要将不具有公共符号的 .obj 文件链接到库中。 ……
这个等你自己去查相关资料,自己理解,编译器编译链接阶段都做什么。 说能让你理解的就是,你这个代码,什么都没做,只包含头文件就和没写一样,编译器会给你警告。 就像你平常做个事情,你什么都不做,肯定要告诉别人,我没做啊...
coco123fdsg 2013-01-23
  • 打赏
  • 举报
回复
引用 10 楼 coco_jim 的回复:
引用 9 楼 lile1234_show 的回复:MSDN: 错误消息 链接器工具警告 LNK4221 未找到公共符号;存档成员将不可访问 向库添加了不具有公共符号的 .obj 文件。对象中的符号在后面的包括 .lib 的链接器操作中将不可访问。 若要解决此警告,请不要将不具有公共符号的 .obj 文件链接到库中。 (1)编译器将源文件编译成汇编代码,然后由……
什么是不具有公共符号?意思是说声明了但没定义吗
lee_鹿游原 2013-01-23
  • 打赏
  • 举报
回复
引用 10 楼 coco_jim 的回复:
引用 9 楼 lile1234_show 的回复:MSDN: 错误消息 链接器工具警告 LNK4221 未找到公共符号;存档成员将不可访问 向库添加了不具有公共符号的 .obj 文件。对象中的符号在后面的包括 .lib 的链接器操作中将不可访问。 若要解决此警告,请不要将不具有公共符号的 .obj 文件链接到库中。 (1)编译器将源文件编译成汇编代码,然后由……
我去,说了半天和没说一样... 随便加入 int i=0;就行
coco123fdsg 2013-01-23
  • 打赏
  • 举报
回复
引用 9 楼 lile1234_show 的回复:
MSDN: 错误消息 链接器工具警告 LNK4221 未找到公共符号;存档成员将不可访问 向库添加了不具有公共符号的 .obj 文件。对象中的符号在后面的包括 .lib 的链接器操作中将不可访问。 若要解决此警告,请不要将不具有公共符号的 .obj 文件链接到库中。 (1)编译器将源文件编译成汇编代码,然后由汇编器(assembler)翻译成机器指令 (再……
还是不明白,什么意思。那么这个问题该怎么解决呢
lee_鹿游原 2013-01-23
  • 打赏
  • 举报
回复
MSDN: 错误消息 链接器工具警告 LNK4221 未找到公共符号;存档成员将不可访问 向库添加了不具有公共符号的 .obj 文件。对象中的符号在后面的包括 .lib 的链接器操作中将不可访问。 若要解决此警告,请不要将不具有公共符号的 .obj 文件链接到库中。 (1)编译器将源文件编译成汇编代码,然后由汇编器(assembler)翻译成机器指令 (再加上其它相关信息)后输出到一个个目标文件(object file,VC的编译器编译出 的目标文件默认的后缀名是.obj)中;(2)链接器(linker)将一个个的目标文件 (或许还会有若干程序库)链接在一起生成一个完整的可执行文件。 编译器编译源文件时会把源文件的全局符号(global symbol)分成强(strong)和弱(weak) 两类传给汇编器,而随后汇编器则将强弱信息编码并保存在目标文件的符号表中。 编译器在连接的时候未找到公共符号,So....
lee_鹿游原 2013-01-23
  • 打赏
  • 举报
回复
引用 7 楼 coco_jim 的回复:
只是include了memory,其他什么都没做
嗯,我也试了一下,也有这个错误。 看看有没有相关资料
coco123fdsg 2013-01-23
  • 打赏
  • 举报
回复
只是include了memory,其他什么都没做
lee_鹿游原 2013-01-23
  • 打赏
  • 举报
回复
引用 5 楼 coco_jim 的回复:
引用 3 楼 zhao4zhong1 的回复:编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E我只是include了memory头文件,再没有其他任何代码,所以i文件也看过了,里面全是memory相关的东西,没有一句是我写的。求高人指点
你这些文件里,是不是没内容?就写头文件?
coco123fdsg 2013-01-23
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
我只是include了memory头文件,再没有其他任何代码,所以i文件也看过了,里面全是memory相关的东西,没有一句是我写的。求高人指点
coco123fdsg 2013-01-23
  • 打赏
  • 举报
回复
引用 2 楼 lile1234_show 的回复:
蛋疼的问题,谷歌一下试试
实在是google不到啊

65,202

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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