LINUX.ORG.RU

undefined reference to symbol glewInit

 , ,


0

1

Здравствуйте

Компилирую meshlab

./external/lib/linux-g++/libjhead.a(jhead.o): In function `DoCommand':
jhead.c:(.text+0x221): warning: the use of `mktemp' is dangerous, better use `mkstemp'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/../../../../x86_64-pc-linux-gnu/bin/ld: glarea.o: undefined reference to symbol 'glewInit'
/usr/lib64/libGLEW.so.1.12: error adding symbols: DSO missing from command line
https://bpaste.net/show/128d1818bd4c

https://github.com/megabaks/stuff/tree/master/media-gfx/meshlab

Порядок линковки?

x86_64-pc-linux-gnu-g++ -Wl,-O1 -Wl,--as-needed -Wl,-rpath,'$ORIGIN' -o ../distrib/meshlab main.o mainwindow_Init.o mainwindow_RunTime.o glarea.o multiViewer_Container.o plugindialog.o customDialog.o filterScriptDialog.o saveSnapshotDialog.o layerDialog.o savemaskexporter.o changetexturename.o stdpardialog.o xmlstdpardialog.o additionalgui.o xmlgeneratorgui.o rendermodeactions.o trackball.o trackmode.o glarea_setting.o filterthread.o moc_interfaces.o moc_mainwindow.o moc_glarea.o moc_multiViewer_Container.o moc_plugindialog.o moc_customDialog.o moc_filterScriptDialog.o moc_saveSnapshotDialog.o moc_savemaskexporter.o moc_changetexturename.o moc_layerDialog.o moc_stdpardialog.o moc_xmlstdpardialog.o moc_additionalgui.o moc_xmlgeneratorgui.o moc_rendermodeactions.o moc_filterthread.o qrc_meshlab.o    -L/usr/lib64/qt4 -L/usr/lib64 -L../external/lib/linux-g++ -ljhead -L../distrib -lcommon -lGLU -lQtScript -L/usr/lib64/qt4 -lQtXmlPatterns -lQtXml -lQtOpenGL -L/usr/X11R6/lib -lQtGui -lQtNetwork -lQtCore -lGL -lpthread

Добавь -lGLEW в самый конец.

EXL ★★★★★
()

Не вижу никаких проблем - линковщик не может найти функцию glewInit, о чем он тебе человеческим языком сообщил, в чем проблема то? Ну скажи ты линковщику, где ему GLEW Искать, делов то.

cherry-pick
()
Ответ на: комментарий от cherry-pick

файлы лежат по стандарту

/usr
/usr/bin
/usr/bin/glewinfo
/usr/bin/visualinfo
/usr/include
/usr/include/GL
/usr/include/GL/glew.h
/usr/include/GL/glxew.h
/usr/include/GL/wglew.h
/usr/lib32
/usr/lib32/libGLEW.so -> libGLEW.so.1.12.0
/usr/lib32/libGLEW.so.1.12 -> libGLEW.so.1.12.0
/usr/lib32/libGLEW.so.1.12.0
/usr/lib32/libGLEWmx.so -> libGLEWmx.so.1.12.0
/usr/lib32/libGLEWmx.so.1.12 -> libGLEWmx.so.1.12.0
/usr/lib32/libGLEWmx.so.1.12.0
/usr/lib32/pkgconfig
/usr/lib32/pkgconfig/glew.pc
/usr/lib32/pkgconfig/glewmx.pc
/usr/lib64
/usr/lib64/libGLEW.so -> libGLEW.so.1.12.0
/usr/lib64/libGLEW.so.1.12 -> libGLEW.so.1.12.0
/usr/lib64/libGLEW.so.1.12.0
/usr/lib64/libGLEWmx.so -> libGLEWmx.so.1.12.0
/usr/lib64/libGLEWmx.so.1.12 -> libGLEWmx.so.1.12.0
/usr/lib64/libGLEWmx.so.1.12.0
/usr/lib64/pkgconfig
/usr/lib64/pkgconfig/glew.pc
/usr/lib64/pkgconfig/glewmx.pc
/usr/share
/usr/share/doc
/usr/share/doc/glew-1.12.0
/usr/share/doc/glew-1.12.0/README.txt.bz2
/usr/share/doc/glew-1.12.0/TODO.txt.bz2
как это задать форсированно?

brothermechanic ★★★★★
() автор топика
Ответ на: комментарий от brothermechanic

Я не джентушник, но ошибка у тебя в /var/tmp/portage/media-gfx/meshlab-1.3.3/work/meshlab/src/meshlab/Makefile (или чуть выше), который генерируется либо файлом external/external.pro, либо файлом meshlab_full.pro (что более вероятно). Сделай патч на *.pro-файл, в котором в конец строки LIBS будет задаваться -lGLEW и смотри дальше.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от brothermechanic

Во, нашёл:

http://sourceforge.net/p/meshlab/code/HEAD/tree/trunk/meshlab/src/meshlab/mes...

Пробуй:

--- meshlab.pro 2015-05-07 21:08:08.078115978 +0600
+++ meshlab_patched.pro 2015-05-07 21:09:58.533591171 +0600
@@ -140,11 +140,11 @@
 #      win32-g++:release:LIBS                  += -L../common/release -lcommon
 #}
 
-linux-g++:LIBS += -L../external/lib/linux-g++ -ljhead -L../distrib -lcommon -lGLU
+linux-g++:LIBS += -L../external/lib/linux-g++ -ljhead -L../distrib -lcommon -lGLU -lGLEW
 linux-g++:QMAKE_RPATHDIR += ../distrib
-linux-g++-32:LIBS += -L../external/lib/linux-g++-32 -ljhead -L../distrib -lcommon -lGLU
+linux-g++-32:LIBS += -L../external/lib/linux-g++-32 -ljhead -L../distrib -lcommon -lGLU -lGLEW
 linux-g++-32:QMAKE_RPATHDIR += ../distrib
-linux-g++-64:LIBS += -L../external/lib/linux-g++-64 -ljhead -L../distrib -lcommon -lGLU
+linux-g++-64:LIBS += -L../external/lib/linux-g++-64 -ljhead -L../distrib -lcommon -lGLU -lGLEW
 linux-g++-64:QMAKE_RPATHDIR += ../distrib
 
 # uncomment in your local copy only in emergency cases.
EXL ★★★★★
()

Моет не в тему, но

Теги: gentoo, patch

Я когда что-то патчу в Gentoo, распаковываю исходники, правлю, делаю diff и кладу патч в /etc/portage/patches/... . Дальше emerge или ebuild. Тогда вопросов с линковкой не возникает.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от brothermechanic

Уверен, что ebild написан правильно?

Я вот вижу из доков, что оно так должно собираться:

http://sourceforge.net/p/meshlab/code/HEAD/tree/trunk/meshlab/src/README.txt

cd MESHLAB_DIRECTORY/src/external
qmake -recursive external.pro
make

cd MESHLAB_DIRECTORY/src/
qmake -recursive meshlab_full.pro
make
EXL ★★★★★
()
Ответ на: комментарий от EXL

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

Версия 1.3.2 (которую тоже пришлось самому допиливать, потом ее взяли в дерево) ставилась с 20-ю патчами.

brothermechanic ★★★★★
() автор топика
Ответ на: комментарий от brothermechanic

Ещё раз посмотри пожалуйста ebuild. Точно он с параметром -recursive qmake выполняет?

У меня эта программа собралась как на Qt4, так и на Qt5 (правда там экран чёрный вместо просмотрщика, но мне лень разбираться). Патч был минимален:

--- Meshlab_qt5/meshlab/src/meshlabplugins/filter_csg/filter_csg.pro	2014-04-01 22:59:31.000000000 +0700
+++ Meshlab/meshlab/src/meshlabplugins/filter_csg/filter_csg.pro	2015-05-07 22:35:36.533636442 +0600
@@ -18,6 +18,6 @@
 win32-msvc2008:LIBS		 += ../../external/lib/win32-msvc2008/mpirxx.lib ../../external/lib/win32-msvc2008/mpir.lib
 win32-msvc2010:LIBS		 += ../../external/lib/win32-msvc2008/mpirxx.lib ../../external/lib/win32-msvc2008/mpir.lib
 win32-msvc2012:LIBS		 += ../../external/lib/win32-msvc2008/mpirxx.lib ../../external/lib/win32-msvc2008/mpir.lib
-linux-g++:INCLUDEPATH += ../../external/inc/linux-g++/mpir-2.4.0
-linux-g++:LIBS += ../../external/lib/linux-g++/libmpirxx.a ../../external/lib/linux-g++/libmpir.a
+linux-g++|linux-g++-64:INCLUDEPATH += ../../external/inc/linux-g++/mpir-2.4.0
+linux-g++|linux-g++-64:LIBS += ../../external/lib/linux-g++/libmpirxx.a ../../external/lib/linux-g++/libmpir.a
 
--- Meshlab_qt5/vcglib/wrap/ply/plystuff.h	2013-05-22 22:25:25.000000000 +0700
+++ Meshlab/vcglib/wrap/ply/plystuff.h	2015-05-07 22:46:35.169120449 +0600
@@ -57,6 +57,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h> 
+#include <unistd.h>
 #ifdef WIN32
 #include <io.h>
 #endif

Пруф того, что работает (кстати очень шустро работает!): http://i.imgur.com/IgE9hsT.png

EXL ★★★★★
()
Ответ на: комментарий от Kroz

не все ебилды поддерживают portage/patches ака epatch_user

anonymous
()
Ответ на: комментарий от EXL

спасибо за интерес и помощь в решении!

действительно теперь была проблема в особенности ебилда, функция eqmake4 выдавала эту ошибку, а при добавлении -recursive вываливалась с

* Running qmake ...

 * No project files found in '/var/tmp/portage/media-gfx/meshlab-1.3.3/work/meshlab/src'!
 * This shouldn't happen - please send a bug report to https://bugs.gentoo.org/
То есть она этого не умеет.

Сейчас сделал кустарно

http://wstaw.org/m/2015/05/08/plasma-desktopmj2798.png

нет плагинов... http://wstaw.org/m/2015/05/08/plasma-desktopyZ2798.png хотя они есть https://bpaste.net/show/9fc83f718564

у вас собралось с плагинами?

https://github.com/megabaks/stuff/tree/master/media-gfx/meshlab

brothermechanic ★★★★★
() автор топика
Ответ на: спасибо за интерес и помощь в решении! от brothermechanic

у вас собралось с плагинами?

Ага, с плагинами. Оно всё в ditrib валится, может в этом проблема? Возможно они там подгружаются из каталога с бинарником, типа ./plugins/*.so, так что если бинарник лежит в /usr/bin, оно и старается подгрузить /usr/bin/plugins/*.so

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.