10 / 10 / 0
Регистрация: 14.11.2008
Сообщений: 56
1

Ошибка в VC++: ссылка на неразрешенный внешний символ

14.11.2008, 15:13. Показов 17800. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, не могу понять, что я делаю не так. Помогите, пожалуйста, разобраться. Работаю в Visual Studio 2008.
Создаю новый проект, все компилируется, но когда начинается компановка выскакиевает куча ошибок.
Код программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include "EZ_LCD.h"
 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE /*hPrevInstance*/,
                     LPSTR     /*lpCmdLine*/,
                     int       /*nCmdShow*/)
{
    HRESULT     res_ = S_OK;
 
    // Create instance of EzLcd.
    CEzLcd* ezlcd_ = new CEzLcd();
 
    // Have it initialize itself
    res_ = ezlcd_->InitYourself(_T("PROG1"));
 
    HANDLE stroka_ = ezlcd_->AddText(LG_STATIC_TEXT, LG_MEDIUM, DT_LEFT, 80);
    ezlcd_->SetOrigin(stroka_, 50, 18);
    ezlcd_->SetText(stroka_, _T("HELLO!"));
    return 0;
}

В итоге вот такие ошибки:
Кликните здесь для просмотра всего текста
1>v9.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: long __thiscall CEzLcd::SetText(void *,wchar_t const *)" (?SetText@CEzLcd@@QAEJPAXPB_W@Z) в функции _WinMain@16
1>v9.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: long __thiscall CEzLcd::SetOrigin(void *,int,int)" (?SetOrigin@CEzLcd@@QAEJPAXHH@Z) в функции _WinMain@16
1>v9.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void * __thiscall CEzLcd::AddText(enum LGObjectType,enum LGTextSize,int,int)" (?AddText@CEzLcd@@QAEPAXW4LGObjectType@@W4LGTextSize@@HH@Z) в функции _WinMain@16
1>v9.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: long __thiscall CEzLcd::InitYourself(wchar_t const *,int,int,struct lgLcdConfigureContext *,int,int)" (?InitYourself@CEzLcd@@QAEJPB_WHHPAUlgLcdConfigureContext@@HH@Z) в функции _WinMain@16
1>v9.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall CEzLcd::CEzLcd(void)" (??0CEzLcd@@QAE@XZ) в функции _WinMain@16
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: ссылка на неразрешенный внешний символ _main в функции ___tmainCRTStartup


Если я что то упустила, я дополню
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2008, 15:13
Ответы с готовыми решениями:

Создание шаблона класса ( Ошибка: ссылка на неразрешенный внешний символ )
Файл: Massive.h #ifndef MASSIVE_H #define MASSIVE_H #include <iostream> using std::istream;...

Ссылка на неразрешенный внешний символ
вот что за проблема? нифига не могу понять .. error LNK2019: ссылка на неразрешенный внешний...

Ссылка на неразрешенный внешний символ _WTSQuerySessionInformationW@20
Добрый вечер. Код такой: bool CAddInNative::CallAsFunc(const long lMethodNum, ...

Error LNK2019: ссылка на неразрешенный внешний символ
Такая ошибка, не знаю как исправить: error LNK2019: ссылка на неразрешенный внешний символ...

3
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
14.11.2008, 15:21 2
Моя мысля говорит, что "EZ_LCD.h" работает с какой-то длл-кой. И чтобы у тебя все заработало, тебе надо подключить .lib файл для нее.
0
10 / 10 / 0
Регистрация: 14.11.2008
Сообщений: 56
14.11.2008, 15:30  [ТС] 3
Есть аналогичный проект
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
//
// MultiplePages.cpp : Defines the entry point for the application.
//
 
#include "stdafx.h"
 
#include "EZ_LCD.h"
 
 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE /*hPrevInstance*/,
                     LPSTR     /*lpCmdLine*/,
                     int       /*nCmdShow*/)
{
    HRESULT     res_ = S_OK;
    DWORD       familyId_ = LGLCD_DEVICE_FAMILY_JACKBOX;
 
    // Create instance of EzLcd.
    CEzLcd* ezlcd_ = new CEzLcd();
 
    // Have it initialize itself
    res_ = ezlcd_->InitYourself(_T("Multiple Pages Sample"));
 
    if (res_ != S_OK)
    {
        // Something went wrong, when connecting to the LCD Manager software. We need to get out now
        delete ezlcd_;
        return 0;
    }
 
    ezlcd_->SetDeviceFamilyToUse(LGLCD_DEVICE_FAMILY_SPEAKERS_Z10);
 
    ///////////////////////////////
    // Static and scrolling Text //
    ///////////////////////////////
    HANDLE titleScrolling_ = ezlcd_->AddText(LG_SCROLLING_TEXT, LG_BIG, DT_CENTER, 160);
    ezlcd_->SetOrigin(titleScrolling_, 0, 2);
 
    HANDLE text1Static_ = ezlcd_->AddText(LG_STATIC_TEXT, LG_MEDIUM, DT_LEFT, 80);
    ezlcd_->SetOrigin(text1Static_, 0, 22);
 
    HANDLE text2Static_ = ezlcd_->AddText(LG_STATIC_TEXT, LG_SMALL, DT_RIGHT, 80);
    ezlcd_->SetOrigin(text2Static_, 80, 22);
 
    //////////////////
    // Progress Bar //
    //////////////////
    //    HANDLE progressBar_ = lcd->AddProgressBar(LG_CURSOR);
    HANDLE progressBar_ = ezlcd_->AddProgressBar(LG_DOT_CURSOR);
    ezlcd_->SetProgressBarSize(progressBar_, 120, 5);
    ezlcd_->SetOrigin(progressBar_, 20, 36);
 
    // temp variable to update progress bar cursor position
    float tempCounter_ = 0.0f;
 
    // Now I add in a second page
    ezlcd_->AddNewPage();
    int pageCount_ = ezlcd_->GetPageCount();
 
    // setup the new page to be the one to add controls to
    ezlcd_->ModifyControlsOnPage(pageCount_-1);
    HANDLE page2text1Static_ = ezlcd_->AddText(LG_STATIC_TEXT, LG_MEDIUM, DT_LEFT, 80);
    ezlcd_->SetOrigin(page2text1Static_, 50, 18);
    ezlcd_->SetText(page2text1Static_, _T("Second Page"));
    HANDLE progressBarPage2_ = ezlcd_->AddProgressBar(LG_FILLED);
    ezlcd_->SetProgressBarSize(progressBarPage2_, 120, 5);
    ezlcd_->SetOrigin(progressBarPage2_, 20, 36);
    ezlcd_->SetProgressBarPosition(progressBarPage2_, (++tempCounter_/10));
 
    // Variables used to loop through and switch between the two pages, without using any timer.
    // Each loop is 50ms, so looping 40 times gives each page 2 seconds total, before we switch
    // to the other page. */
    int loopCount_ = 0;
    int pageToShow_ = 0;
 
    ezlcd_->ModifyControlsOnPage(0); 
    ezlcd_->SetText(titleScrolling_, _T("I am the title of the first page"));
    ezlcd_->SetText(text1Static_, _T("Medium size"));
    ezlcd_->SetText(text2Static_, _T("Small size"));
    ezlcd_->SetProgressBarPosition(progressBar_, (++tempCounter_/10));
 
    DWORD tickCount1_ = GetTickCount();
 
    // main loop
    while(1)
    {
        // Switching back and forth between the two pages that we've created
        if (loopCount_ < 80)
            pageToShow_ = 0;
        else if (loopCount_ < 160)
            pageToShow_ = 1;
        else
        {
            pageToShow_ = 0;
            loopCount_ = 0;
        }
 
        if (ezlcd_->IsConnected())
        {
            ezlcd_->ShowPage(pageToShow_);
 
            // Modifying controls on the 1st page
            ezlcd_->ModifyControlsOnPage(0);
            ezlcd_->SetProgressBarPosition(progressBar_, (++tempCounter_/10));
 
            ezlcd_->ModifyControlsOnPage(1);
            ezlcd_->SetProgressBarPosition(progressBarPage2_, (++tempCounter_/20));
 
            // Check if button 1 triggered
            if (ezlcd_->ButtonIsPressed(LG_BUTTON_1)
                || ezlcd_->ButtonIsPressed(LG_BUTTON_2)
                || ezlcd_->ButtonIsPressed(LG_BUTTON_3)
                || ezlcd_->ButtonIsPressed(LG_BUTTON_4)
                )
            {
                pageToShow_ = (pageToShow_ + 1) % 2;
                ezlcd_->ShowPage(pageToShow_);
            }
        }
 
        // Must run the following every loop.
        ezlcd_->Update();
 
        // Switch every 10 seconds between 3 device families, if they are present
        if ((GetTickCount() - tickCount1_) > 5000)
        {
            if (familyId_ == LGLCD_DEVICE_FAMILY_JACKBOX)
            {
                // Try to move to a G15
                if (ezlcd_->AnyDeviceOfThisFamilyPresent(LGLCD_DEVICE_FAMILY_KEYBOARD_G15) == TRUE)
                {
                    ezlcd_->SetDeviceFamilyToUse(LGLCD_DEVICE_FAMILY_KEYBOARD_G15);
 
                    // Found the device. We will now run on this device automatically
                    familyId_ = LGLCD_DEVICE_FAMILY_KEYBOARD_G15;
                }
                else if (ezlcd_->AnyDeviceOfThisFamilyPresent(LGLCD_DEVICE_FAMILY_SPEAKERS_Z10) == TRUE)
                {
                    ezlcd_->SetDeviceFamilyToUse(LGLCD_DEVICE_FAMILY_SPEAKERS_Z10);
 
                   // Found the device. We will now run on this device automatically
                    familyId_ = LGLCD_DEVICE_FAMILY_SPEAKERS_Z10;
                }
                else
                {
                }
            }
            else if (familyId_ == LGLCD_DEVICE_FAMILY_KEYBOARD_G15)
            {
                // Try to move to a Z10
                if (ezlcd_->AnyDeviceOfThisFamilyPresent(LGLCD_DEVICE_FAMILY_SPEAKERS_Z10) == TRUE)
                {
                    // Found the device. We will now run on this device automatically
                    familyId_ = LGLCD_DEVICE_FAMILY_SPEAKERS_Z10;
                    ezlcd_->SetDeviceFamilyToUse(LGLCD_DEVICE_FAMILY_SPEAKERS_Z10);
                }
                else if (ezlcd_->AnyDeviceOfThisFamilyPresent(LGLCD_DEVICE_FAMILY_JACKBOX) == TRUE)
                {
                    // Found the device. We will now run on this device automatically
                     familyId_ = LGLCD_DEVICE_FAMILY_JACKBOX;
                     ezlcd_->SetDeviceFamilyToUse(LGLCD_DEVICE_FAMILY_JACKBOX);
                }
                else
                {
                }
            }
            else if (familyId_ == LGLCD_DEVICE_FAMILY_SPEAKERS_Z10)
            {
                // Try to move to a G15
                if (ezlcd_->AnyDeviceOfThisFamilyPresent(LGLCD_DEVICE_FAMILY_JACKBOX) == TRUE)
                {
                    // Found the device. We will now run on this device automatically
                     familyId_ = LGLCD_DEVICE_FAMILY_JACKBOX;
                     ezlcd_->SetDeviceFamilyToUse(LGLCD_DEVICE_FAMILY_JACKBOX);
                }
                else if (ezlcd_->AnyDeviceOfThisFamilyPresent(LGLCD_DEVICE_FAMILY_KEYBOARD_G15) == TRUE)
                {
                    // Found the device. We will now run on this device automatically
                     familyId_ = LGLCD_DEVICE_FAMILY_KEYBOARD_G15;
                     ezlcd_->SetDeviceFamilyToUse(LGLCD_DEVICE_FAMILY_KEYBOARD_G15);
                }
                else
                {
                }
            }
 
            // Update timer
            tickCount1_ = GetTickCount();
 
        } 
 
        Sleep(30);
        loopCount_++;
    } 
 
    delete ezlcd_;
 
    return 0;
}
я пытаюсь из него убрать лишнее и оставить одну строчку текста.
В проекте подключено еще нное кол-тво файло .h и точка .cpp, но если я их пытаюсь скопировать в свой то компилятор начинает ругаться что все включаемые файлы должны быть прописаны исключительно в stdafx.h, а в тех должен быть включен только он, но даже если это я делаю, хотя мне не понятно почему этот проект запускается и без этого, то он выводит вот те ошибки.
0
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 5
23.01.2010, 18:49 4
Не знаю, насколько это актуально, но я нашел более детальные инструкции на другом форуме:
----------------------- unresolved external symbol
Pick a line from the errors:

Quote:
wxmswd.lib(window.obj) : error LNK2001: unresolved external symbol __imp__DragAcceptFiles@8

From that line, you can extract a function name, "DragAcceptFiles". Search Google or the documentation you have on your computer (the Platform SDK documentation, for example), using this function name as the keyword. Search for the import library necessary. The Platform SDK documentation always includes this information right at the end, labelled "Import library".

Искать можно просто far manager'ом по папкам с либами.

Модераторам: Если надо, переведу; мне кажется это сообщение стоит оставить, чтобы по поиску по форуму можно было найти решение проблемы.
0
23.01.2010, 18:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2010, 18:49
Помогаю со студенческими работами здесь

Error LNK2019: ссылка на неразрешенный внешний символ...
пишу прогу, которая выводит список файлов в папке и дату их последнего изменения. Но выбивает...

Error LNK2019: ссылка на неразрешенный внешний символ
Привет всем, я начинающий в этом деле человек так что не серчайте сильно. У меня проблема...

Error LNK2019: ссылка на неразрешенный внешний символ
Здравствуйте! Пишу приложение на MFC с использованием OpenGL. Возникла такая проблема... При...

Error LNK2019: ссылка на неразрешенный внешний символ
Недавно начал учить visual c++, столкнулся с проблемой и незню как исправить, укажите пожалуйста на...

Error LNK2019: ссылка на неразрешенный внешний символ
Короче перешел я с XP на семерку и тут появилась такая фигня. Те проекты которые нормально работали...

Error LNK2019: ссылка на неразрешенный внешний символ
Доброго времени суток. Товарищи, начал изучать DirectX 10 по книге Алексея Попова и столкнулся с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru