1. 程式人生 > >error LNK2001: unresolved external symbol "int g_cTemplates" (?g_cTemplates@@3HA)(轉)

error LNK2001: unresolved external symbol "int g_cTemplates" (?g_cTemplates@@3HA)(轉)

win dir 完整路徑 compile microsoft def mailto pre 註意

原文轉自:http://blog.sina.com.cn/s/blog_639a2ad70101kpen.html

編譯directshow若幹問題的解決

1.安裝好windows sdk,進入directshow目錄下面的directshow\baseclasses,打開baseclasses.sln項目文件,編譯,Debug目錄下生成strmbasd.lib 2.新建vc filter工程,到工程屬性->c/c++下添加包含目錄,此步驟為添加directx頭文件和directshow頭文件,添加以下三個目錄 Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\common Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses Microsoft SDKs\Windows\v7.1\Include 3.到 鏈接器->常規->附加庫目錄,添加對應的lib文件 Microsoft SDKs\Windows\v7.1\Lib Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Debug 4.到 鏈接器->常規->附加依賴項,指定在上述第3步的目錄內,添加哪些lib文件 添加如下兩個文件 winmm.lib "C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Debug\strmbasd.lib" 註意上面添加strmbasd.lib必須指定完整路徑,否則系統會查找到系統平臺下的strmbasd.lib,指定完整路徑時必須兩端加上雙引號 5.源碼文件裏添加頭文件 #include <streams.h> 編譯,假如報錯的話,見下: 編譯directshow問題的解決

use vs2005 compiler directshow baseclasses has something error
1.ctlutil.h
modify as below:
  //operator=(LONG);
COARefTime& operator=(LONG);

2.winutil.cpp
modify as below:
UINT Count;
for (Count = 0;Count < Result;Count++) {

3.outputq.cpp
modify as below:
long iDone;
for (iDone = 0;

4.wxdebug.cpp
modify as below:
//static g_dwLastRefresh = 0;
static DWORD g_dwLastRefresh = 0;

如果編譯程式出現
error LNK2019: 無法解析的外部符號 "int __stdcall lstrcmpWInternal
error LNK2019: 無法解析的外部符號 "int __cdecl wsprintfWInternal
error LNK2019: 無法解析的外部符號 "int __stdcall lstrcmpiWInternal
之類的錯誤
這是baseclasses編譯時有個設定要變更
就是project屬性->組態屬性->C/C++->語言之下的 "將wchar_t當作Built-in型別" 設為false
就可以解決上述link error的問題

如果編譯程式link strmbase.lib or strmbasd.lib出現以下的error
strmbasd.lib(dllentry.obj) : error LNK2001: unresolved external symbol "class CFactoryTemplate * g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A)strmbasd.lib(dllsetup.obj) : error LNK2001: unresolved external symbol "int g_cTemplates" (?g_cTemplates@@3HA)
則重新修改baseclasses project的內容
CFactoryTemplate g_Templates[1] = {
{ L"SystemClock", &CLSID_SystemClock, CSystemClock::CreateInstance} //修改後;
// {&CLSID_SystemClock, CSystemClock::CreateInstance} //原本的;
};
另外在baseclasses工程的 vc Project->Settings...->C/C++的 preprocessor definitions:加入FILTER_DLL
然後重新編譯 strmbase.lib and strmbasd.lib 即可

error LNK2001: unresolved external symbol "int g_cTemplates" (?g_cTemplates@@3HA)(轉)