Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compilation on Linux is broken? #2

Open
ghost opened this issue Aug 6, 2017 · 22 comments
Open

Compilation on Linux is broken? #2

ghost opened this issue Aug 6, 2017 · 22 comments

Comments

@ghost
Copy link

ghost commented Aug 6, 2017

Здравствуйте. Пытаюсь скомпилировать на Manjaro linux и не получается. Инструкции никакой нет, так что догадываюсь сам, своим скудным умишкой. Что я делаю:
Клонировал AnanamideAPI и AnanamideEditor (каждый в свою директорию), открыл проекты в Qtcreator, попытался собрать (в Qtcreator ничего не трогал, всё по дефолту).
AnanamideAPI собирается, появляются библиотеки, не ругается, что что-то не нашлось. AnanamideEditor, в свою очередь, ищет AnanamideAPI в depend. Ладно, скопировал AnanamideAPI в его директорию depend, пересобрал. Пытаюсь опять собрать AnanamideEditor и сборка вываливается с ошибкой:

cp -f ../depend/AnandamideAPI/bin/* ../bin/.
cp: не удалось выполнить stat для '../depend/AnandamideAPI/bin/*': Нет такого файла или каталога
make: *** [Makefile:457: ../bin/AnandamideEditor_x86] Ошибка 1

Проблема, я так понимаю, в project/AnandamideEditor.pro строки

ANANDAMIDE_API_BIN = $$shell_path("../depend/AnandamideAPI/bin/*")

и

QMAKE_POST_LINK += $$QMAKE_COPY $${ANANDAMIDE_API_BIN} $$shell_path("../bin/.")

неправильно воспринимаются/обрабатываются.

Недособранный таким образом AnanamideEditor/bin/AnandamideEditor_x86d ругается на отсутствие libAnandamideAPI_x86d.so.1.

Как побороть?

@Evil-Spirit
Copy link
Owner

как вариант, просто руками скопировать libAnandamideAPI_x86d.so.1. или зарегистрировать в системе (я не очень понимаю в linux)

@Evil-Spirit
Copy link
Owner

в случае, если у вас получится собрать, был бы очень признателен, если бы вы написали подробную инструкцию, как это делается для линукс

@Evil-Spirit
Copy link
Owner

@kogolbok обновил readme.md, как это делается для Windows. сборку под linux я лично не проверял, но это точно делали. Возможно, есть какие-то проблемы.

@ghost
Copy link
Author

ghost commented Aug 6, 2017

Так. Попробовал скопировать скомпилированные библиотеки из AnanamideEditor/depend/AnandamideAPI/lib в AnanamideEditor/depend/AnandamideAPI/bin, после этого перекомпилировал AnandamideEditor. Ошибка та же. Я так понимаю, что он не принимает символ "*". Убрал его из обеих строк и сборка прошла. Но запустить не получается, опять же

./AnandamideEditor_x86d: error while loading shared libraries: libAnandamideAPI_x86d.so.1: cannot open shared object file: No such file or directory

ldd ./AnandamideEditor_x86d показывает следующее:

    linux-vdso.so.1 (0x00007ffd01df4000)
    libAnandamideAPI_x86d.so.1 => not found
    libQt5Help.so.5 => /usr/lib/libQt5Help.so.5 (0x00007f83ecd5d000)
    libQt5OpenGL.so.5 => /usr/lib/libQt5OpenGL.so.5 (0x00007f83ecb06000)
    libQt5Widgets.so.5 => /usr/lib/libQt5Widgets.so.5 (0x00007f83ec2ae000)
    libQt5Gui.so.5 => /usr/lib/libQt5Gui.so.5 (0x00007f83ebb38000)
    libQt5Sql.so.5 => /usr/lib/libQt5Sql.so.5 (0x00007f83eb8ee000)
    libQt5Xml.so.5 => /usr/lib/libQt5Xml.so.5 (0x00007f83eb6b1000)
    libQt5Core.so.5 => /usr/lib/libQt5Core.so.5 (0x00007f83eafbc000)
    libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f83ead31000)
    libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f83eab13000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f83ea78b000)
    libm.so.6 => /usr/lib/libm.so.6 (0x00007f83ea479000)
    libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f83ea262000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007f83e9ebc000)
    libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f83e9c86000)
    libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x00007f83e99ee000)
    libz.so.1 => /usr/lib/libz.so.1 (0x00007f83e97d7000)
    libicui18n.so.59 => /usr/lib/libicui18n.so.59 (0x00007f83e9359000)
    libicuuc.so.59 => /usr/lib/libicuuc.so.59 (0x00007f83e8fa8000)
    libsystemd.so.0 => /usr/lib/libsystemd.so.0 (0x00007f83ed0d1000)
    libpcre2-16.so.0 => /usr/lib/libpcre2-16.so.0 (0x00007f83e8d39000)
    libdouble-conversion.so.1 => /usr/lib/libdouble-conversion.so.1 (0x00007f83e8b29000)
    libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f83e8925000)
    libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007f83e8612000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f83ecfd0000)
    libGLX.so.0 => /usr/lib/libGLX.so.0 (0x00007f83e83e0000)
    libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f83e80a1000)
    libXext.so.6 => /usr/lib/libXext.so.6 (0x00007f83e7e8f000)
    libGLdispatch.so.0 => /usr/lib/libGLdispatch.so.0 (0x00007f83e7bd9000)
    libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00007f83e7912000)
    libgraphite2.so.3 => /usr/lib/libgraphite2.so.3 (0x00007f83e76e6000)
    libicudata.so.59 => /usr/lib/libicudata.so.59 (0x00007f83e5bd3000)
    libresolv.so.2 => /usr/lib/libresolv.so.2 (0x00007f83e59bd000)
    libcap.so.2 => /usr/lib/libcap.so.2 (0x00007f83e57b9000)
    librt.so.1 => /usr/lib/librt.so.1 (0x00007f83e55b1000)
    liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00007f83e538b000)
    liblz4.so.1 => /usr/lib/liblz4.so.1 (0x00007f83e5177000)
    libgcrypt.so.20 => /usr/lib/libgcrypt.so.20 (0x00007f83e4e69000)
    libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0x00007f83e4c54000)
    libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007f83e49e1000)
    libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f83e47b8000)
    libbz2.so.1.0 => /usr/lib/libbz2.so.1.0 (0x00007f83e45a8000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f83e43a4000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f83e419e000)

Решил, что недостаточно скомпилировать AnandamideAPI и сделал sudo make install. перекомпилировал эдитор снова, всё равно не находит библиотеки.

Удалил всё полностью, потом клонировал из гита AnandamideEditor, в его depends клонировал AnandamideAPI. Собрал AnandamideAPI, сделал sudo make install, чтобы установить в системные /usr/lib. Потом в AnandamideEditor/project/AnandamideEditor.pro модифицировал строки
18

ANANDAMIDE_API_BIN = $$shell_path("../depend/AnandamideAPI/bin/")

и 39

QMAKE_POST_LINK += $$QMAKE_COPY -r $${ANANDAMIDE_API_BIN} $$shell_path("../bin/")

(хотя не вижу в них смысла, всё равно во время компилации в depend/AnandamideAPI/bin/ не создаётся ни одного файла)

Теперь прошёл на шаг дальше :) ./AnandamideEditor_x86d выдаёт ошибку

Neurone size : 424
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
Can not load library from "libAnandamideAPI_x86d.so" file : file not found.
Can not load library "" from file "".
Can not load library from "libAnandamideAPI_x86d.so" file : file not found.
Can not load library "" from file "".
Ошибка сегментирования (стек памяти сброшен на диск)

Теперь ldd ./AnandamideEditor_x86d нашла

libAnandamideAPI_x86d.so.1 => /usr/lib/libAnandamideAPI_x86d.so.1 (0x00007f9c09bbb000)

Чего эдитор тогда ещё ищет?

Ошибка libpng, допустим можно конвертировать, исправить

А вот coredump я читать не умею. Можетвыложить куда?

@Evil-Spirit
Copy link
Owner

@kogolbok
Эдитор пытается загрузить эту библиотеку, как свою stdlib (через LoadLibrary) динамически, возможно, он ее не находит.

@Evil-Spirit
Copy link
Owner

@kogolbok
попробуй дебажить здесь https://github.com/Evil-Spirit/AnandamideAPI/blob/master/src/Anandamide/AnandamideLibrary.cpp#L201

@Evil-Spirit
Copy link
Owner

посмотри, по какому пути он пытается ее грузить

@ghost
Copy link
Author

ghost commented Aug 6, 2017

Да, похоже тут и есть проблема:

#ifdef _WIN32
				
				#else
					base_name.replace("lib", "");
					base_name.prepend("lib");
#endif

Только я вообще не понимаю зачем их переименовывать и что с этим делать?

@Evil-Spirit
Copy link
Owner

@kogolbok фиг знает, зачем это. попробуй разобраться

@ghost
Copy link
Author

ghost commented Aug 6, 2017

Так. переконвертил все пнгшки, чтобы не жаловалось. С этим, вроде нормально.

При компилляции depend/AnandamideAPI Qtcreator создаёт директорию там build-AnandamideEditor-Desktop-Debug и собирает всё внутри. Из неё он откладывает часть библиотек в depend/AnandamideAPI/lib. bin ему (на линуксе при дефолтных настройках) не нужен вообще. При установке (sudo make install) он кладёт библиотеки

libAnandamideAPI_x86d.so
libAnandamideAPI_x86d.so.1
libAnandamideAPI_x86d.so.1.0
libAnandamideAPI_x86d.so.1.0.0
libAnandamideAPI_x86.so
libAnandamideAPI_x86.so.1
libAnandamideAPI_x86.so.1.0
libAnandamideAPI_x86.so.1.0.0

в /usr/lib. После компиляции самого Эдитора ldd показывает, что эдитор требует библиотеку именно из /usr/lib. Но при запуске, он почему-то начинает искать любу в той папке, где находится сам Эдитор.

Я тупо закинул все скомпиленные либы из depend/AnandamideAPI/build-AnandamideEditor-Desktop-Debug в bin, где лежит AnandamideEditor_x86d. Теперь при запуске вообще ничего не происходит. Онпросто выходит. Короче, разбираться в чужом коде дело неблагодарное, не для моего умишки. Я совершенно не понимаю что за манипуляции делает AnandamideLibrary.cpp.

@Evil-Spirit
Copy link
Owner

@kogolbok

Онпросто выходит.
Что-то стало лучше, это точно..

Из неё он откладывает часть библиотек в depend/AnandamideAPI/lib. bin ему (на линуксе при дефолтных настройках) не нужен вообще. При установке (sudo make install) он кладёт библиотеки

Ему библиотека эта нужна для двух вещей:

  1. правильной работы (т.к она линкуется)
  2. загрузке оттуда STDLib. Загружает эту библиотеку динамически, ожидает найти ее рядом с выполняемым файлом.

Нужно понять, работает ли 1)
Для этого нужно закомментить в AnandamideAPI срочку 129 в файле AnandamideScript
libraries->loadLibrary("AnandamideAPI");
Без нее редактор вроде как должен запуститься.

@Evil-Spirit
Copy link
Owner

Evil-Spirit commented Aug 7, 2017

@kogolbok
еще надо закомментировать в AnandamideScript.cpp:132

	void Script::newScript() {
		clear();
		Logic *main_def = new Logic(this);

		ActionNeurone *action = new ActionNeurone("entry", main_def);
		action->setPos(-240, -160);
		//Neurone *shutdown = libraries->getLibrary("Std")->getDef("Shutdown")->createNeurone(libraries);
		//shutdown->setPos(0, -144);
		//action->getEvent("out")->addAction(shutdown->getAction("in"));

		main_def->addNode(action);
		//main_def->addNode(shutdown);
		main_def->setName("Main");
		logics.append(main_def);
	}

@Evil-Spirit
Copy link
Owner

@kogolbok
после этого программа должна стартовать. чтобы загрузить библиотеку руками, нужно правой кнопкой нажать на Libraries и выбрать IncludeLib, после чего найти libAnandamideAPI_x86d.so и выбрать его. Вот опять могут быть проблемы, но их можно решить, повозившись в путях и той функции загрузки.

@ghost
Copy link
Author

ghost commented Aug 7, 2017

Хорошо, попозже сделаю. Работа.

@Evil-Spirit
Copy link
Owner

@kogolbok, как успехи?

@ghost
Copy link
Author

ghost commented Aug 8, 2017

На рабочей неделе никак, завал, на выходные отложил.

@ghost
Copy link
Author

ghost commented Aug 18, 2017

Так. Наконец вернулся к экспериментам. Удалил всё. Заново клонировал, изменил AnandamideAPI.pro и AnandamideScript.cpp, во время компиляции выбило ошибку, что newScript() не объявлен. Попробовал оставить только его объявление, тоже не сработало, ошибки не сохранил.

Тогда я снёс опять всё, опять клонировал, ничего не изменял, скомпилировал снова как есть с помощью qmake. QtCreator не запускал, мало ли он там нарегулирует. make install тоже не делал, ну её, засорять систему. В итоге опять ругается на ту же ошибку, что и в первом сообщении, что не удивительно, директория ../depend/AnandamideAPI/bin/ пуста. Но эдитор скомпилирован, так что я просто запустил его с LD_LIBRARY_PATH=/home/kostia/Bin/git/ananamides/AnandamideEditor/depend/AnandamideAPI/lib/ ./AnandamideEditor_x86 И опять ругается, мол,
[code]Neurone size : 424
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
Can not load library from "libAnandamideAPI_x86d.so" file : file not found.
Can not load library "" from file "".
Can not load library from "libAnandamideAPI_x86d.so" file : file not found.
Can not load library "" from file "".
Ошибка сегментирования (стек памяти сброшен на диск)[/code]
Тогда я снова скопировал библиотеки из depend/AnandamideAPI/lib в AnandamideEditor/bin. И о чудо, заработало. Сыплет ошибками типа QXcbConnection: XCB error: 8 (BadMatch), sequence: 4739, resource id: 58720427, major code: 130 (Unknown), minor code: 3 но работает. Теперь сижу и не знаю, что с ним дальше делать :). Фактически - получилось запустить, но через ж. Надо навести порядок с тем куда компилируются библиотеки и откуда они читаются. Три разных места библиотек и три разных результата.

@Evil-Spirit
Copy link
Owner

Evil-Spirit commented Aug 19, 2017

@kogolbok я написал инструкцию по компиляции, там надо было обновить submodules.
Дело в том, что библиотеки для системы скриптов линкуются динамически (loadlibrary) и оттуда вытаскиваются новые блоки, так работает и std библиотека блоков, она загружает libAnandamideAPI_x86d.so

@Evil-Spirit
Copy link
Owner

Evil-Spirit commented Aug 19, 2017

но если std библиотека не загрузилась, можно ее загрузить вручную
image

@Evil-Spirit
Copy link
Owner

Ну а дальше можно сделать уже простую программу
anandamide editor untitled 2017-08-19 11 10 37

@Evil-Spirit
Copy link
Owner

Надо навести порядок с тем куда компилируются библиотеки и откуда они читаются. Три разных места библиотек и три разных результата.

Дело в том, что я разрабатывал это под Windows, поэтому там порядок есть, а под Linux потом адаптировал другой человек, тоже заработало, но не очень-то наведен порядок.

@Evil-Spirit
Copy link
Owner

@kogolbok
есть еще такая штука, надеюсь, найдешь, чем ее открыть. ну а если нет, то там можно собрать доки из doxygen
https://github.com/Evil-Spirit/AnandamideAPI/blob/master/docs/AnandamideAPI.chm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant