调用静态链接库时报unresolved external symbol ___assert

ddfjdkt 2010-05-19 10:49:13
用vc6做了一个lib库,新建了一个控制台工程,在该工程中调用该lib库中的函数,会报如下错误:
Compiling...
zmain.c
Linking...
fjh.lib(fjh_ex.obj) : error LNK2001: unresolved external symbol ___assert
fjh.lib(fjh_showrun.obj) : error LNK2001: unresolved external symbol ___assert
fjh.lib(fjh_cli.obj) : error LNK2001: unresolved external symbol ___assert
Debug/testcli.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

testcli.exe - 4 error(s), 0 warning(s)

在做fjh.lib的时候,用到了assert函数,源文件中包含了<assert.h>库文件,不清楚在引用该lib库的时候为什么会报assert找不到,请各位大侠帮帮忙,谢谢!
...全文
261 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cattycat 2010-05-20
  • 打赏
  • 举报
回复
不知道,是不是lib库导出的符号是__asert()呢,这个去VC/MFC版问问高手吧,继续关注。
ddfjdkt 2010-05-20
  • 打赏
  • 举报
回复
当我对__assert打个桩时,即在控制台程序中加入
void __assert(const char *msg)
{
__asm int 3;
}
时就可以成功编译,而对assert和_assert打桩都不行,我感到很奇怪的是,为什么需要在assert前面加两个下划线,我看了assert.h库文件中,只有对assert和_assert的定义,不知道__assert是从哪里冒出来的。
ddfjdkt 2010-05-20
  • 打赏
  • 举报
回复
fjh_ex.c,fjh_showrun.c,fjh_cli.c中都有#include <assert.h>
cattycat 2010-05-20
  • 打赏
  • 举报
回复
你那个库的实现文件中要#include <assert.h>
ddfjdkt 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 loaden 的回复:]


那就调整一下这些库链接的顺序。
不要把你调用的lib放在前面,而应该放在后面。
[/Quote]

我的lib没有放在link里面,是直接用add file的方式添加进来的
老邓 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ddfjdkt 的回复:]

那些常用的库都有的,而且控制台程序中直接用assert函数也不会报错,只有调用了lib中的函数才会报错
[/Quote]
那就调整一下这些库链接的顺序。
不要把你调用的lib放在前面,而应该放在后面。
ddfjdkt 2010-05-20
  • 打赏
  • 举报
回复
那些常用的库都有的,而且控制台程序中直接用assert函数也不会报错,只有调用了lib中的函数才会报错
老邓 2010-05-20
  • 打赏
  • 举报
回复
即,你的程序需要依赖这个链接里提到的库:
http://msdn.microsoft.com/en-us/library/abx4dbyh%28v=VS.71%29.aspx
老邓 2010-05-20
  • 打赏
  • 举报
回复
另外,类似这样的问题,搜索google就可以了:http://www.google.com.hk/search?hl=zh-CN&source=hp&q=msdn+assert&aq=f&aqi=g4&aql=&oq=&gs_rfai=

注意看关键词。

进入:http://msdn.microsoft.com/en-us/library/9sb57dw4%28VS.71%29.aspx
找到:
Libraries

All versions of the C run-time librariesC run-time libraries.
老邓 2010-05-20
  • 打赏
  • 举报
回复
你这是链接错误,和头文件是没关系的。
将一些常用的库加入链接,比如:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comctl32.lib
wsock32.lib
odbc32.lib
mymtom 2010-05-19
  • 打赏
  • 举报
回复
确认一下fjh_ex.cpp,fjh_showrun.cpp,fjh_cli.cpp三个文件都有
#include <assert.h>
ddfjdkt 2010-05-19
  • 打赏
  • 举报
回复
这个lib库我是通过添加文件的方式加进来的,在控制台程序中我也添加了#include <assert.h>,但是就是报unresolved external symbol ___assert这个错误,但是如果我不掉用lib中提供的函数,就不会报这个错误,请问是怎么回事啊
fox000002 2010-05-19
  • 打赏
  • 举报
回复
静态库构建时又不需要链接,就是简单打包

依赖库的问题需要客户程序自己解决
ddfjdkt 2010-05-19
  • 打赏
  • 举报
回复
但是lib可以编成功啊,没有warning啊
pengzhixi 2010-05-19
  • 打赏
  • 举报
回复
可能你那个lib库用的名称与库文件中的名称有些不同。
ddfjdkt 2010-05-19
  • 打赏
  • 举报
回复
请各位帮帮忙啊,谢谢啊

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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