Добрый день коллеги, столкнулся с такой задачей в проекте нужно использовать сторонние наработки. Наработки однозначно рабочие (хотя бы под какой-то версией VS, вероятно 2005 они запускались и успешно справлялись со своей задачей). Создаю пустой консольный проект в VS2008, добавляю в него необходимые файлы (в них ничего не меняю) и итог : множественные ошибки линковки. Похожие топики почитал - не то. Все включаемые файлы, на своих местах. Вот код: | Код | #include <time.h>
#include "../ConcordLib/ConcHolder.h" #include "../common/util_classes.h"
void PrintHelp() { printf ("load <Concordance Project> - load project\n"); printf ("query <query> - run a query\n"); printf ("set limit <limit> - maximal count of hits to find\n"); printf ("set profile_cycle <count> - how many times should the program run the query\n"); printf ("set out <file> - print hits to <file> \n"); printf ("set result_format html|txt|table|docids - set the format of hits\n"); printf ("exit - exit\n"); printf ("showtime - toggle show time switcher\n"); printf ("echoquery - toggle echo query switcher\n");
};
CConcHolder Holder; size_t CountOfCycles = 1; bool bShowTime = true; bool bEchoQuery = true; string OutFile = "";
void FreeCorpus() { if (Holder.m_pIndexator) { delete Holder.m_pIndexator; Holder.m_pIndexator = 0; }; };
bool LoadCorpus(string FileName) {
Trim(FileName); if (FileName.empty()) { printf("cannot load from empty corpus\n"); return false; } FreeCorpus(); Holder.m_pIndexator = new CConcIndexator;
if (!Holder.m_pIndexator->LoadProject(FileName.c_str())) { fprintf (stderr, "cannot load project %s\n", FileName.c_str()); return false; }; return true; };
void ExitFromProgram() { FreeCorpus(); FreeConcordDicts(); exit(0); };
void RussianConvertToDictionary (string& S) { #ifdef WIN32 OemToCharBuff((char*)S.c_str(), (char*)S.c_str(), S.length()); #else KOI8ToWin(S); #endif
};
void RussianConvertToScreen (string& S) { #ifdef WIN32 CharToOemBuff((char*)S.c_str(), (char*)S.c_str(), S.length()); #else WinToKOI8(S); #endif
};
void RunQuery(string Command, string Query) { Trim(Query); if (Query.empty()) { printf ("cannot process empty query\n"); return; }; if (!Holder.m_pIndexator) { printf ("no loaded corpus\n"); return; };
if (CountOfCycles > 1) printf ("Count of profile cycles = %i\n", CountOfCycles);
DWORD EndHitNo = 0, HitsCount;
time_t t1; time(&t1); DDCErrorEnum Error;
for (int ProfileCycleNo=0; ProfileCycleNo < CountOfCycles; ProfileCycleNo++) { EndHitNo = 0;
Error = Holder.SimpleQuery(Query.c_str(), EndHitNo, HitsCount);
if (Error != errUnknown) { fprintf (stderr, "Error! %s \n", GetDDCErrorString(Error).c_str()); return; };
if (ProfileCycleNo > 0) Holder.ClearQueryCache();
};
time_t t2; time(&t2); string s = Holder.m_QueryResultStr; if (OutFile.empty()) { if (Holder.m_pIndexator->m_Language == morphRussian) RussianConvertToScreen(s); printf ("%s", s.c_str()); } else { FILE * fp = fopen (OutFile.c_str(),"a"); if (!fp) { fprintf (stderr, "cannot open %s\n", OutFile.c_str()); } else { fprintf (fp, "%s\n", s.c_str()); fclose (fp); }; };
printf ("HitsCount = %i\n", HitsCount); if (bShowTime) fprintf (stderr, "Seconds = %i\n", t2 - t1);
};
void RunCommand(string line) { Trim(line); if (line == "exit") ExitFromProgram(); if (line == "showtime") { bShowTime = !bShowTime; printf ("ShowTime = %s\n", bShowTime? "true": "false"); }; if (line == "echoquery") { bEchoQuery = !bEchoQuery; printf ("EchoQuery = %s\n", bEchoQuery? "true": "false"); }; if (line == "help") { PrintHelp(); return; }; StringTokenizer tok(line.c_str(), " "); string command = tok.next_token(); if (command.empty()) return; if (command == "load") LoadCorpus(tok.next_token()); else if (command == "query") RunQuery(command,line.substr(line.find(" ")) ); else if (command == "set") { string variab = tok.next_token(); string value = tok.next_token(); if (value.empty()) return; if (variab == "profile_cycle") { CountOfCycles = atoi(value.c_str()); printf ("Count of profile cycles = %i\n", CountOfCycles); } else if (variab == "limit") { Holder.m_ResultLimit = atoi(value.c_str()); fprintf (stderr, "ResultLimit = %i\n", Holder.m_ResultLimit); } else if (variab == "out") { OutFile = value.c_str(); if (OutFile == "stdout") OutFile = ""; } else if (variab == "result_format") { Holder.SetResultFormat(value); fprintf (stderr, "result format = %s\n", Holder.GetResultFormatStr().c_str()); }; } else { fprintf (stderr, "Unknown command, type \"help\" to get the list of commands\n"); }; };
int main(int argc, char* argv[]) { if (argc == 2) { string s = argv[1];
if ( (s == "--version") || (s== "-v")) { fprintf (stderr,"%s", DDCVersion.c_str()); fprintf (stderr,"ConcordConsole, command line query processor\n"); return 1; } };
Holder.m_pIndexator = 0; Holder.SetResultFormat("TEXT"); Holder.m_ResultLimit=10; InitConcordDicts();
if (argc == 2) RunCommand(string("load ") +argv[1]);
for (;;) { printf (">"); char Form[1000]; fgets(Form, 1000, stdin); string q = Form;
if (bEchoQuery) printf ("%s", Form);
if (Holder.m_pIndexator) if (Holder.m_pIndexator->m_Language == morphRussian) RussianConvertToDictionary(q); RunCommand(q); };
return 0; }
|
Ошибки линковки:
| Код | 1>------ Rebuild All started: Project: ConcordConsole, Configuration: Release Win32 ------ 1>Deleting intermediate and output files for project 'ConcordConsole', configuration 'Release|Win32' 1>Compiling... 1>converts.cpp 1>ConcordConsole.cpp 1>Linking... 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall StringTokenizer::next_token(void)" (?next_token@StringTokenizer@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "public: __thiscall StringTokenizer::~StringTokenizer(void)" (??1StringTokenizer@@QAE@XZ) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "public: __thiscall StringTokenizer::StringTokenizer(char const *,char const *)" (??0StringTokenizer@@QAE@PBD0@Z) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "void __cdecl FreeConcordDicts(void)" (?FreeConcordDicts@@YAXXZ) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __cdecl Trim(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?Trim@@YAAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAV12@@Z) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "public: void __thiscall CConcHolder::ClearQueryCache(void)" (?ClearQueryCache@CConcHolder@@QAEXXZ) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "public: enum DDCErrorEnum __thiscall CConcHolder::SimpleQuery(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,unsigned long &,unsigned long &)" (?SimpleQuery@CConcHolder@@QAE?AW4DDCErrorEnum@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAK1@Z) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "public: void __thiscall CConcHolder::SetResultFormat(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?SetResultFormat@CConcHolder@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall CConcHolder::GetResultFormatStr(void)const " (?GetResultFormatStr@CConcHolder@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "public: __thiscall CConcHolder::~CConcHolder(void)" (??1CConcHolder@@QAE@XZ) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "public: __thiscall CConcHolder::CConcHolder(void)" (??0CConcHolder@@QAE@XZ) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "bool __cdecl InitConcordDicts(void)" (?InitConcordDicts@@YA_NXZ) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "public: bool __thiscall CConcIndexator::LoadProject(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?LoadProject@CConcIndexator@@QAE_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "public: __thiscall CConcIndexator::~CConcIndexator(void)" (??1CConcIndexator@@QAE@XZ) 1>ConcordConsole.obj : error LNK2001: unresolved external symbol "public: __thiscall CConcIndexator::CConcIndexator(void)" (??0CConcIndexator@@QAE@XZ) 1>C:\Rml\Source\ConcordConsole\Release\ConcordConsole.exe : fatal error LNK1120: 15 unresolved externals 1>Build log was saved at "file://c:\Rml\Source\ConcordConsole\Release\BuildLog.htm" 1>ConcordConsole - 16 error(s), 0 warning(s) ========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
|
Кто-нибудь можешь дать совет, что делаю не так. Спасибо.
|