Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> error LNK2001 (проблемы с линковкой), не запускается сторонний рабоч. проект 
:(
    Опции темы
becks
Дата 26.8.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Добрый день коллеги, столкнулся с такой задачей в проекте нужно использовать сторонние наработки. Наработки однозначно рабочие (хотя бы под какой-то версией 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 ==========



Кто-нибудь можешь дать совет, что делаю не так. Спасибо.

PM MAIL   Вверх
volatile
Дата 27.8.2011, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(becks @  26.8.2011,  14:48 Найти цитируемый пост)
нужно использовать сторонние наработки

Скорей всего, вы эти сторонние наработки просто не подключили к проекту.

Код

#pragma comment(lib,"STORONNAYA_NARABOTKA.LIB")


PM MAIL   Вверх
becks
Дата 29.8.2011, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Дело в том, что "сторонние наработки" представлены несколькими папками, в которых только *.h и *.cpp, никаких *.lib там нет. В одной из папок содержится по сути консольный демо-пример, который я и пытаюсь запустить, он в свою очередь пользует файлы из других папок "сторонней наработки". Все эти логи как раз получаются при запуске этого примера. Если я его запущу, то перенести в свой проект мне не составит труда.
PM MAIL   Вверх
xvr
Дата 29.8.2011, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(becks @  29.8.2011,  09:26 Найти цитируемый пост)
Дело в том, что "сторонние наработки" представлены несколькими папками, в которых только *.h и *.cpp, никаких *.lib там нет.

Значит подключайте .cpp, если .lib нету

PM MAIL   Вверх
rodnover
Дата 29.8.2011, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: нет
Всего: 10



Может *.h? И в настройках проекта прописать пути к include.

Скорее всего эти *.cpp и *.h используют сторонние библиотеки. И для их компиляции нужно смотреть что же они используют.

Это сообщение отредактировал(а) rodnover - 29.8.2011, 12:36
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.