Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с линковкой библиотек OpenGL. Ошибка - "Unresolved external"

1.2K
13 сентября 2006 года
PAVEL BASIC
171 / / 24.07.2006
Кто-нибудь может объяснить что означает вот такая ошибка:
[Linker Error] Unresolved external 'TForm1::wglCreateContext(void *)' referenced from C:\3D Driver\Unit1.OBJ
1.9K
13 сентября 2006 года
SABROG
242 / / 26.01.2006
Либо OpenGL библиотеки, которые ты используешь скомпилены в MSVC, либо ты забыл добавить .lib файл к проекту.
1.2K
13 сентября 2006 года
PAVEL BASIC
171 / / 24.07.2006
Я вот в Билдере пишу прогу которая работает с 3д графикой под Open GL.
Что я сделал не так, не могу понять. Линкер выдаёт ошибку
[Linker Error] Unresolved external '__stdcall wglCreateContext(void *)' referenced from C:\3D Driver\Unit1.OBJ

[Linker Error] Unresolved external '__stdcall wglMakeCurent(void *, void *)' referenced from C:\3D Driver\Unit1.OBJ

Я бы выложил исходник да не могу слишком велик.

Вот код срр-файла:

Цитата:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

}
//---------------------------------------------------------------------------
BOOL bSetupPixelFormat(HDC hdc)
{
PIXELFORMATDESCRIPTOR pfd, *ppfd;
int pixelformat;

ppfd = &pfd;

ppfd->nSize = sizeof(PIXELFORMATDESCRIPTOR);
ppfd->nVersion = 1;
ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
ppfd->dwLayerMask = PFD_MAIN_PLANE;
ppfd->iPixelType = PFD_TYPE_RGBA;
ppfd->cColorBits = 16;
ppfd->cDepthBits = 16;

ppfd->cAccumBits = 0;
ppfd->cStencilBits = 0;

if ((pixelformat = ChoosePixelFormat(hdc, ppfd)) == 0)
{
MessageBox(NULL, "ChoosePixelFormat failed", "Error", MB_OK);
return FALSE;
}
if (SetPixelFormat(hdc, pixelformat, ppfd) == FALSE)
{
MessageBox(NULL, "SetPixelFormat failed", "Error", MB_OK);
return FALSE;
}
return TRUE;

HGLRC wglCreateContext(HDC hdc);
BOOL wglMakeCurrent(HDC hdc, HGLRC hglrc);
}
//----------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ghDC = GetDC(Handle);
if (!bSetupPixelFormat(ghDC))
Close();
ghRC = wglCreateContext(ghDC);
wglMakeCurrent(ghDC, ghRC);

glClearColor(0.0, 0.0, 0.0, 0.0);

FormResize(Sender);

glEnable(GL_COLOR_MATERIAL);
glEnable(GL_DEPTH_TEST);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
float p[4]={3,3,3,1},
d[3]={-1,-1,-3};
glLightfv(GL_LIGHT0,GL_POSITION,p);
glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,d);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if(ghRC)
{
//wglMakeCurrent(ghDC,0);
wglDeleteContext(ghRC);
}
if(ghDC)
ReleaseDC(Handle, ghDC);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormResize(TObject *Sender)
{
glViewport( 0, 0, Width, Height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho(-5,5, -5,5, 2,12);
gluLookAt(0,0,5, 0,0,0, 0,1,0);
glMatrixMode( GL_MODELVIEW );

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Draw();
}
//---------------------------------------------------------------------------
void TForm1::Draw()
{
glClear(GL_DEPTH_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT);
GLUquadricObj *quadObj;
quadObj=gluNewQuadric();

gluQuadricDrawStyle(quadObj, GLU_FILL);
glColor3f(1,0,0);
gluSphere(quadObj, 2,10,10);
glRotatef(3, 0,1,0);
gluDeleteQuadric(quadObj);

SwapBuffers(ghDC);
}



Код Н-файла:

Цитата:

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TTimer *Timer1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall FormResize(TObject *Sender);
void __fastcall Timer1Timer(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
HGLRC ghRC;
HDC ghDC;
void Draw();

};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

2
13 сентября 2006 года
squirL
5.6K / / 13.08.2003
не прилинкована библиотека, по моему - OpenGL32.lib зовется.

ЗЫ: а ты потом пишешь, что тебя несправедливо обижают. вопрос то - RTFM'ный
1.2K
13 сентября 2006 года
PAVEL BASIC
171 / / 24.07.2006
[QUOTE=squirL]ЗЫ: а ты потом пишешь, что тебя несправедливо обижают.[/QUOTE]

Это не имеет отношения к делу закрытие темы и незнание мной какого либо вопроса это разные вещи никак не связаные между собой.

[QUOTE=squirL]не прилинкована библиотека, по моему - OpenGL32.lib зовется.[/QUOTE]

Я отыскал библитеку OpenGL32.lib подключил её #include <GL/OpenGL32.lib >

Но когда запускаю проект мне выдаётся груда ошибок.

Цитата:

[C++ Error] OpenGL32.lib(1): E2206 Illegal character 'Ђ' (0x80)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x8)
[C++ Error] OpenGL32.lib(2): E2040 Declaration terminated incorrectly
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x0)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '€' (0x88)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x0)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x0)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character ' ' (0xa0)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x1)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x0)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x11)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x0)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '€' (0x88)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x0)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x0)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character ' ' (0xa0)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x1)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x0)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x11)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x0)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x1e)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '€' (0x88)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '#' (0x23)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x0)
[C++ Error] OpenGL32.lib(2): E2206 Illegal character '' (0x0)
[C++ Error] OpenGL32.lib(2): E2228 Too many error or warning messages



Только не надо язвить, все сначала были ламеры.:D :D :D :D

2
13 сентября 2006 года
squirL
5.6K / / 13.08.2003
[quote=PAVEL BASIC]Это не имеет отношения к делу закрытие темы и незнание мной какого либо вопроса это разные вещи никак не связаные между собой.[/quote]
имеет. но это в другом топике обсудим.
[quote=PAVEL BASIC]
Я отыскал библитеку OpenGL32.lib подключил её #include <GL/OpenGL32.lib
Но когда запускаю проект мне выдаётся груда ошибок.
Только не надо язвить, все сначала были ламеры.[/quote]
о Господи... тут плакать надо, а не язвить. Мой тебе совет - пока не пришел злой модератор, быстро загляни в справочник по билдеру и выясни что такое линковка, что такое библиотеки, а что такое заголовочные файлы.
547
14 сентября 2006 года
Hydra
488 / / 20.06.2006
#pragma link "путь\\OpenGL32.lib
547
14 сентября 2006 года
Hydra
488 / / 20.06.2006
2SABROG
Тогда была бы ошибка что-то типа
Can't open xxx.lib, possibly COFF
1.9K
14 сентября 2006 года
SABROG
242 / / 26.01.2006
[QUOTE=Hydra]2SABROG
Тогда была бы ошибка что-то типа
Can't open xxx.lib, possibly COFF[/QUOTE]
Верно.
1.2K
14 сентября 2006 года
PAVEL BASIC
171 / / 24.07.2006
Не выходит, я пререпробовал следующие варианты:
#pragma link "GL\\opengl32.LIB"
#pragma link "C:\Program Files\Borland\CBuilder6\Lib\Psdk\\opengl32.LIB"
#pragma link "Lib\Psdk\\opengl32.LIB"

Выдаёт ошибку: [Linker Fatal Error] Fatal: Unable to open file 'OpenGl32.lib'

Ума не приложу почему невозможно открыть файл, ведь путь я указал верный.:confused: :confused: :confused: :confused:
1.9K
14 сентября 2006 года
SABROG
242 / / 26.01.2006
[QUOTE=PAVEL BASIC]Не выходит, я пререпробовал следующие варианты:
#pragma link "GL\\opengl32.LIB"
#pragma link "C:\Program Files\Borland\CBuilder6\Lib\Psdk\\opengl32.LIB"
#pragma link "Lib\Psdk\\opengl32.LIB"

Выдаёт ошибку: [Linker Fatal Error] Fatal: Unable to open file 'OpenGl32.lib'

Ума не приложу почему невозможно открыть файл, ведь путь я указал верный.:confused: :confused: :confused: :confused:[/QUOTE]
Насколько я помню, при указании путей в инклудах - нет необходимости дублировать слэш. А у тебя он дублирется во всех трех строках в разных местах. Ты вообще сам понимаешь что написал ? Так попробуй:

 
Код:
#pragma link "C:\Program Files\Borland\CBuilder6\Lib\Psdk\opengl32.lib"
1.2K
14 сентября 2006 года
PAVEL BASIC
171 / / 24.07.2006
Извиняюсь за свою нерасторпность этот вариант я тоже пробовал, просто забыл указать. При таком раскладе Билдер 6 выдаёт такую чушь что просто ужас (ну я немножко приувеличил пишет он тоже самое только соедянняя все символы пути):confused: :confused: :confused: :confused:
1.9K
14 сентября 2006 года
SABROG
242 / / 26.01.2006
Попробуй так тогда Shift+F11, выбери *.lib и добавь нужный.
1
17 сентября 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=PAVEL BASIC]Это не имеет отношения к делу закрытие темы и незнание мной какого либо вопроса это разные вещи никак не связаные между собой.
[/QUOTE]
Зато нарушение правил и закрытие темы между собой связаны очень прямо.
Настоятельно рекомендую ознакомится - с правилами топика.
Кстати флуд (т.е. создание нескольких тем по одному и тому же вопросу) тоже не приветствуется.
Так что пеняй сам на себя.
Вопрос (и ответ на него ) добавлен в ФАК
Темы соеденены.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог