请教一个lib的问题:

时间:2021-06-24 10:48:47
这两天用vc2005编译emule源代码的时候发现,
1):emule所连结的几个lib 库的源代码中都没有导出类的声明,这样做可以吗?,
2):在emule引用lib库的大部分时候代码没有出错,有些有默认参数的类函数连接出错如:

void EnableSaveRestore(LPCTSTR pszSection, BOOL bRectOnly = FALSE );
AddSourceDlg.obj : error LNK2001: unresolved external symbol "public: void __thiscall CResizableDialog::EnableSaveRestore(unsigned short const *)" (?EnableSaveRestore@CResizableDialog@@QAEXPBG@Z)

12 个解决方案

#1


1.可以
2.查看EnableSaveRestore的实现部分有没有,就是在AddSourceDlg.cpp中有没有
void CResizableDialog::EnableSaveRestore(LPCTSTR pszSection, BOOL bRectOnly)
{
...
}

如果有删除debug和release目录下面的文件重新编译,如果没有...自己加上

#2


谢谢楼上,照这样做了,还是不行。
另外
void CResizableDialog::EnableSaveRestore(LPCTSTR pszSection, BOOL bRectOnly)
{
...
}
这个类成员函数是封装在ResizableLib.lib中。ResizableLib.lib是emule所联接的几个lib中的一个。

#3


AddSourceDlg.cpp是emule工程中的一个文件。

#4


你给的声明:void EnableSaveRestore(LPCTSTR pszSection, BOOL bRectOnly = FALSE );

实现:void __thiscall CResizableDialog::EnableSaveRestore(unsigned short const *)

不一样啊

#5


------ Build started: Project: emule, Configuration: Release Win32 ------
Linking...
   Creating library .\release\emule.lib and object .\release\emule.exp
AddSourceDlg.obj : error LNK2001: unresolved external symbol "public: void __thiscall CResizableDialog::EnableSaveRestore(unsigned short const *)" (?EnableSaveRestore@CResizableDialog@@QAEXPBG@Z)
ClientDetailDialog.obj : error LNK2001: unresolved external symbol "public: void __thiscall CResizableSheet::EnableSaveRestore(unsigned short const *)" (?EnableSaveRestore@CResizableSheet@@QAEXPBG@Z)
DialogMinTrayBtn.obj : error LNK2001: unresolved external symbol "public: __thiscall CResizableDialog::CResizableDialog(unsigned short const *,class CWnd *)" (??0CResizableDialog@@QAE@PBGPAVCWnd@@@Z)
ListViewWalkerPropertySheet.obj : error LNK2001: unresolved external symbol "public: __thiscall CResizableSheet::CResizableSheet(unsigned short const *,class CWnd *,unsigned int)" (??0CResizableSheet@@QAE@PBGPAVCWnd@@I@Z)
png.lib(pngrutil.obj) : error LNK2001: unresolved external symbol __imp__strtod
.\release\emule.exe : fatal error LNK1120: 5 unresolved externals
Build log was saved at "file://c:\Documents and Settings\Administrator\桌面\emule\emule\srchybrid\release\BuildLog.htm"
emule - 6 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

emule 工程中AddsourceDlg.cpp中有一句对EnableSaveRestore的使用。
EnableSaveRestore(_T("AddSourceDlg"));

#6


ResizableLib.lib中EnableSaveRestore的实现
void CResizableDialog::EnableSaveRestore(LPCTSTR pszSection, BOOL bRectOnly)
{
m_sSection = pszSection;

m_bEnableSaveRestore = TRUE;
m_bRectOnly = bRectOnly;

// restore immediately
LoadWindowRect(pszSection, bRectOnly);
}

#7


方面把程序给我看看吧,这样看不出来 EnochShen@QQ.com

#8


http://blog.csdn.net/loleeve/
这是编译的帮助。
我是在vc2005下编译的。会不会有什么特殊的地方?

#9


1.几个project设置都是Unicode吗?
2.几个project都是用vc2005编译的吗?

#10


to: Cline(营营)
1.是用unicode
2.都是用vc2005编译的

#11


1.可以

2.VC菜单->project->Add to project->Files将.lib文件加入到工程中(注意:如果.lib有静态版本和动态版本的时候,所加入的.lib一定要与工程的编译方式一定,例如:如果编译Release程序的话,最好使用静态版本的.lib文件)

试一试,希望对你有所帮助!

#12


谢谢楼上几位的帮助,以上的方法我都是了,我感觉可能版本不对的原因。
最后我把vc2005卸掉,改装vc2003了,编译通过了,实在耽误不起时间。

最后还是问一下第一个问题:这种不要在头文件中导出类的声明是不是只能静态连接?网上有没有介绍这种方法的文档?

#1


1.可以
2.查看EnableSaveRestore的实现部分有没有,就是在AddSourceDlg.cpp中有没有
void CResizableDialog::EnableSaveRestore(LPCTSTR pszSection, BOOL bRectOnly)
{
...
}

如果有删除debug和release目录下面的文件重新编译,如果没有...自己加上

#2


谢谢楼上,照这样做了,还是不行。
另外
void CResizableDialog::EnableSaveRestore(LPCTSTR pszSection, BOOL bRectOnly)
{
...
}
这个类成员函数是封装在ResizableLib.lib中。ResizableLib.lib是emule所联接的几个lib中的一个。

#3


AddSourceDlg.cpp是emule工程中的一个文件。

#4


你给的声明:void EnableSaveRestore(LPCTSTR pszSection, BOOL bRectOnly = FALSE );

实现:void __thiscall CResizableDialog::EnableSaveRestore(unsigned short const *)

不一样啊

#5


------ Build started: Project: emule, Configuration: Release Win32 ------
Linking...
   Creating library .\release\emule.lib and object .\release\emule.exp
AddSourceDlg.obj : error LNK2001: unresolved external symbol "public: void __thiscall CResizableDialog::EnableSaveRestore(unsigned short const *)" (?EnableSaveRestore@CResizableDialog@@QAEXPBG@Z)
ClientDetailDialog.obj : error LNK2001: unresolved external symbol "public: void __thiscall CResizableSheet::EnableSaveRestore(unsigned short const *)" (?EnableSaveRestore@CResizableSheet@@QAEXPBG@Z)
DialogMinTrayBtn.obj : error LNK2001: unresolved external symbol "public: __thiscall CResizableDialog::CResizableDialog(unsigned short const *,class CWnd *)" (??0CResizableDialog@@QAE@PBGPAVCWnd@@@Z)
ListViewWalkerPropertySheet.obj : error LNK2001: unresolved external symbol "public: __thiscall CResizableSheet::CResizableSheet(unsigned short const *,class CWnd *,unsigned int)" (??0CResizableSheet@@QAE@PBGPAVCWnd@@I@Z)
png.lib(pngrutil.obj) : error LNK2001: unresolved external symbol __imp__strtod
.\release\emule.exe : fatal error LNK1120: 5 unresolved externals
Build log was saved at "file://c:\Documents and Settings\Administrator\桌面\emule\emule\srchybrid\release\BuildLog.htm"
emule - 6 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

emule 工程中AddsourceDlg.cpp中有一句对EnableSaveRestore的使用。
EnableSaveRestore(_T("AddSourceDlg"));

#6


ResizableLib.lib中EnableSaveRestore的实现
void CResizableDialog::EnableSaveRestore(LPCTSTR pszSection, BOOL bRectOnly)
{
m_sSection = pszSection;

m_bEnableSaveRestore = TRUE;
m_bRectOnly = bRectOnly;

// restore immediately
LoadWindowRect(pszSection, bRectOnly);
}

#7


方面把程序给我看看吧,这样看不出来 EnochShen@QQ.com

#8


http://blog.csdn.net/loleeve/
这是编译的帮助。
我是在vc2005下编译的。会不会有什么特殊的地方?

#9


1.几个project设置都是Unicode吗?
2.几个project都是用vc2005编译的吗?

#10


to: Cline(营营)
1.是用unicode
2.都是用vc2005编译的

#11


1.可以

2.VC菜单->project->Add to project->Files将.lib文件加入到工程中(注意:如果.lib有静态版本和动态版本的时候,所加入的.lib一定要与工程的编译方式一定,例如:如果编译Release程序的话,最好使用静态版本的.lib文件)

试一试,希望对你有所帮助!

#12


谢谢楼上几位的帮助,以上的方法我都是了,我感觉可能版本不对的原因。
最后我把vc2005卸掉,改装vc2003了,编译通过了,实在耽误不起时间。

最后还是问一下第一个问题:这种不要在头文件中导出类的声明是不是只能静态连接?网上有没有介绍这种方法的文档?