Link的bug,请问是怎么回事?谢谢先

lenpro 2003-07-16 12:32:35
--------------------Configuration: LR - Win32 Debug--------------------
Linking...
LR.obj : error LNK2001: unresolved external symbol "void __cdecl Shade(struct LObject,struct Vector,struct Vector,struct RGBColor)" (?Shade@@YAXULObject@@UVector@@1URGBColor@@@Z)
Debug/LR.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

LR.exe - 2 error(s), 0 warning(s)
...全文
43 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2003-07-16
  • 打赏
  • 举报
回复
或者声明和定义的格式不一样?
总之,是编译器找不到与你的某处声明相一致的Shade函数的定义。
maxcai 2003-07-16
  • 打赏
  • 举报
回复
如果不介意的话,把CODE贴出来吧
六月初六 2003-07-16
  • 打赏
  • 举报
回复
查一下你的函数定义
TopCat 2003-07-16
  • 打赏
  • 举报
回复
这个函数声明了但是没有定义,如果是DLL里,有可能你没有包含这个DLL的对应LIB文件。
六月初六 2003-07-16
  • 打赏
  • 举报
回复
很可能是笔误
或者是少了包含文件
lenpro 2003-07-16
  • 打赏
  • 举报
回复
愿意给我所有的分数
lenpro 2003-07-16
  • 打赏
  • 举报
回复
问题解决了,是我把一个数组声明成二维的却当成一维的赋值了,还是谢谢大家,照样给分
lenpro 2003-07-16
  • 打赏
  • 举报
回复
谢谢大家的回答,可我没有使用动态库呀,部分代码如下,大家帮忙看看:
typedef struct{
char Name;
Triangle *TriList;
Vertex *VtxList;
int TriCount;
int VtxCount;
Phong *Material;
}LObject;
void Shade(LObject IntersectionObject,Vector IntersectionPoint,Vector N,RGBColor& LocalColor)
{
RGBColor Ia,Ka,Kd;
float Ks,f,d,n;
Vector L,H,V;
Kd=IntersectionObject.Material->Kd;
Ks=IntersectionObject.Material->Ks;
Ka=IntersectionObject.Material->Ka;
n=IntersectionObject.Material->n;
Ia=RenderScene.Ia;
LocalColor.Red=Ka.Red*Ia.Red;
LocalColor.Green=Ka.Green*Ia.Green;
LocalColor.Blue=Ka.Blue*Ia.Blue;
for(int i=1;i<=RenderScene.LightCount;i++){
L=SumVector(RenderScene.PLights[i].Pos,NegativeVector(IntersectionPoint));
d=VectorDistance(L);
L=NormalizeVector(L);
V=SumVector(RenderScene.View.Pos,NegativeVector(IntersectionPoint));
V=NormalizeVector(V);
H=NumVector(SumVector(L,V),0.5);
f=max(1/(RenderScene.PLights[i].c1+RenderScene.PLights[i].c2*d+RenderScene.PLights[i].c3*d*d),1);
LocalColor.Red+=f*RenderScene.PLights[i].I.Red*(Kd.Red*VectorDotProduct(N,L)+Ks*pow(VectorDotProduct(N,H),n));
LocalColor.Green+=f*RenderScene.PLights[i].I.Green*(Kd.Green*VectorDotProduct(N,L)+Ks*pow(VectorDotProduct(N,H),n));
LocalColor.Blue+=f*RenderScene.PLights[i].I.Blue*(Kd.Blue*VectorDotProduct(N,L)+Ks*pow(VectorDotProduct(N,H),n));
}
}
我已经包含了要用到的头文件了,应该不会是这个错误。后来发现在头文件里的函数声明和CPP里的有出入,改了一下,但是又出现如下错误:
Error executing cl.exe.
GZCompiler 2003-07-16
  • 打赏
  • 举报
回复
对于这种包含动态库的程序,我一般的做法是:
在一个WorkSpace中创建多个工程,如生成动态库的工程和测试动态库的工程;
然后写好一个bat文件,其功能是将动态库工程生成的dll和lib还有.h文件copy到指定的包含目录;
指定该bat脚本在动态库工程的post-build step(编译后执行)中运行(在Project Setting中设置);
然后在测试工程的Project Settings中指定个文件的包含路径为上边设置的特定路径即可。

编译时,先编译动态库工程,再编译测试工程就可以运行了。


可以参考这个帖子:
http://expert.csdn.net/Expert/topic/2008/2008535.xml?temp=.9251367
GZCompiler 2003-07-16
  • 打赏
  • 举报
回复
另一种方法补充:
Project->Settings->Link->Input(组合下拉框中选择)->Additional library path
中写入相应lib文件的路径

GZCompiler 2003-07-16
  • 打赏
  • 举报
回复
你是使用动态库了吧?那么在编译时他找不到该动态库的.lib文件,就会报这种错误。
要在Project Settings->Link->Additional libray path中加入相应lib文件的路径,一般在编译后,lib文件和dll文件都在debug/release目录下。

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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