Автор Гілка: Undefined reference to ...  (Прочитано 3783 раз)

Відсутній Pablo

  • Дописувач
  • **
  • дописів: 96
  • Карма: +0/-0
  • Погроміст
Undefined reference to ...
« : 2007-06-27 10:54:16 »
Доброго здоров'я!
Постала проблема: треба відкомпілювати код з використанням OpenGL в середовищі KDevelop (код безглуздий, це для прикладу):
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

int main(int argc, char *argv[])
{
  glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  return EXIT_SUCCESS;
}
Отримую помилку лінкування:
/home/pasha/work/gl/src/gl.cpp:36: undefined reference to `glClearColor(float, float, float, float)'
Я так розумію, що потрібно підключити бібліотеки статичної компоновки. Але як і які?
Пробував як в офтопіку:
#pragma comment(lib,"opengl.lib")
Компілятор на даний фрагмент коду не свариться, але помилка не зникає.
Тихіше їдеш -дальше будеш...
від місця призначення

Відсутній Cthulhu

  • Кореспондент
  • ***
  • дописів: 183
  • Карма: +0/-0
Re: Undefined reference to ...
« Відповідей #1 : 2007-06-27 11:00:17 »
Які флаги компілятору передаєте?

dusoft

  • Гість
Re: Undefined reference to ...
« Відповідей #2 : 2007-06-27 12:50:29 »
-L/path/to/libraries/used -llibrary_nameУ вашому випадку певно треба просто додати до параметрів gcc -lGL

Відсутній Pablo

  • Дописувач
  • **
  • дописів: 96
  • Карма: +0/-0
  • Погроміст
Re: Undefined reference to ...
« Відповідей #3 : 2007-06-27 17:38:23 »
~/work/gl/src$ g++ gl.cpp -lGL
/tmp/ccGyxSa7.o: In function `main':
gl.cpp:(.text+0xa7): undefined reference to `glClearColor(float, float, float, float)'
collect2: ld returned 1 exit status
pasha@Pasha:~/work/gl/src$      

Судячи з цього, бібліотека GL існує, але glClearColor(float, float, float, float) в ній нема. Як визначити, в якій бібліотеці знаходиться дана функція?
Тихіше їдеш -дальше будеш...
від місця призначення

Відсутній Cthulhu

  • Кореспондент
  • ***
  • дописів: 183
  • Карма: +0/-0
Re: Undefined reference to ...
« Відповідей #4 : 2007-06-27 17:47:50 »
Вліпіть відразу "-lGLU -lGLw -lGL". Також не бачу необхідності використовувати g++, якщо програма у вас таки на С.

dusoft

  • Гість
Re: Undefined reference to ...
« Відповідей #5 : 2007-06-27 17:51:53 »
$ nm /usr/X11R6/lib/libGL.so | grep glClearColor
00035300 t __indirect_glClearColor
00026100 T glClearColor
Певно -lGL треба вказувати перед іменем файлу який ви хочете скомпілювати
« Змінено: 2007-06-27 18:06:45 від dusoft »

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: Undefined reference to ...
« Відповідей #6 : 2007-06-27 20:35:37 »
isbear@monstruozo:~$ cat a.cpp
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
 
int main(int argc, char *argv[])
{
  glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  return 1;
}
isbear@monstruozo:~$ g++ a.cpp
/tmp/ccoLJO3R.o: In function `main':
a.cpp:(.text+0x21): undefined reference to `glClearColor'
collect2: ld returned 1 exit status
isbear@monstruozo:~$ g++ a.cpp -lGL
isbear@monstruozo:~$ dpkg -l libgl* | grep -v '\(glib\|glade\)'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                Version        Description
+++-===================-==============-============================================
un  libgl-dev           <none>         (no description available)
un  libgl1              <none>         (no description available)
ii  libgl1-mesa-dev     6.5.1-0.6      A free implementation of the OpenGL API -- G
ii  libgl1-mesa-dri     6.5.1-0.6      A free implementation of the OpenGL API -- D
un  libgl1-mesa-dri-dev <none>         (no description available)
ii  libgl1-mesa-glx     6.5.1-0.6      A free implementation of the OpenGL API -- G
un  libglu-dev          <none>         (no description available)
un  libglu1             <none>         (no description available)
ii  libglu1-mesa        6.5.1-0.6      The OpenGL utility library (GLU)
ii  libglu1-mesa-dev    6.5.1-0.6      The OpenGL utility library -- development su
un  libglu1-xorg        <none>         (no description available)
ii  libglu1-xorg-dev    7.1.0-16       transitional package for Debian etch
un  libglut             <none>         (no description available)
un  libglut-dev         <none>         (no description available)
un  libglut3            <none>         (no description available)
ii  libglut3-dev        3.7-25         development libraries and headers for GLUT
isbear@monstruozo:~$

Може це вам не сильно допоможе, але у мене працює. (Деб'ян етч)
« Змінено: 2007-06-27 20:42:13 від ISBear »

Відсутній Cthulhu

  • Кореспондент
  • ***
  • дописів: 183
  • Карма: +0/-0
Re: Undefined reference to ...
« Відповідей #7 : 2007-06-28 01:56:29 »
isbear@monstruozo:~$ g++ a.cpp -lGL
Щойно осилив спробувати. Все прекрасно працює (що насправді логічно) на zenwalk-current. Перевірте ліби.

Відсутній Pablo

  • Дописувач
  • **
  • дописів: 96
  • Карма: +0/-0
  • Погроміст
Re: Undefined reference to ...
« Відповідей #8 : 2007-06-28 12:45:51 »
Проблема була, напевно, у libgl-dev. Після оновлення програма успішно лінкувалась.

Вліпіть відразу "-lGLU -lGLw -lGL". Також не бачу необхідності використовувати g++, якщо програма у вас таки на С.

Це на майбутнє, далі у програмі буду використовувати особливості С++.

А безпосередньо в коді програми можна вказати, які бібліотеки лінкувати? Я так зрозумів, що хоч компілятор і дозволяє використання #pragma comment(lib,"mylib"), толку з цієї директиви мало, так як при вказанні неіснуючих бібліотек програма лінкується.

Тихіше їдеш -дальше будеш...
від місця призначення