LINUX.ORG.RU

Не хватает библиотеки при сборке cocos2d-x, а она есть!

 , ,


0

1
~/cocos2d-x-3.17.2/cmake-build$ make
[  1%] Built target ext_unzip
[  3%] Built target ext_recast
[  3%] Built target ext_tinyxml2
[  3%] Built target ext_xxhash
[  3%] Built target ext_xxtea
[  3%] Built target ext_clipper
[  4%] Built target ext_edtaa3func
[  4%] Built target ext_convertUTF
[  4%] Built target ext_poly2tri
[  5%] Built target ext_md5
[  5%] Built target external
[ 70%] Built target cocos2d
[ 71%] Built target ext_tolua
[ 72%] Built target ext_luasocket
[ 79%] Built target luacocos2d
[ 84%] Built target jscocos2d
[ 84%] Linking CXX executable ../../../bin/cpp-empty-test/cpp-empty-test
/usr/bin/ld: ../../../../external/linux-specific/fmod/prebuilt/64-bit/libfmod.so: .dynsym local symbol at index 2 (>= sh_info of 2)
/usr/bin/ld: ../../../../external/linux-specific/fmod/prebuilt/64-bit/libfmod.so: .dynsym local symbol at index 3 (>= sh_info of 2)
/usr/bin/ld: ../../../../external/linux-specific/fmod/prebuilt/64-bit/libfmod.so: .dynsym local symbol at index 4 (>= sh_info of 2)
/usr/bin/ld: cannot find -lXxf86vm
collect2: error: ld returned 1 exit status
make[2]: *** [engine/tests/cpp-empty-test/CMakeFiles/cpp-empty-test.dir/build.make:153: bin/cpp-empty-test/cpp-empty-test] Error 1
make[1]: *** [CMakeFiles/Makefile2:1292: engine/tests/cpp-empty-test/CMakeFiles/cpp-empty-test.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
~/cocos2d-x-3.17.2/cmake-build$ 

Я так понимаю, что библиотеки собрались, а вот примеры не хотят. Кто знает в чем причина? Заранее благодарен за любые содержательные ответы.

PS. Файлы libXxf86vm.so.1 и libXxf86vm.so.1.0.0 в /usr/lib/x86_64-linux-gnu/ присутствуют.

PS2. sudo apt-get update && sudo apt-get install libxxf86vm-dev пробовал.


Эти древние иксовые библиотеки скорее всего задепрекейтили и выкинули прямую линковку на них.

Библиотека libXxf86vm использовалась в разных игровых примерах из-за функции по типу XF86VidModeSwitch но кажется это давно ушло в XRandr.

По твоей проблеме:

  1. Всегда делай make VERBOSE=1 вместо make, когда предоставляешь логи. Там будет отчётливо видно что как линукуется или компилируется с какими флагами и в каком порядке.

Отдельный луч поноса создателям cmake, за то что нарушили Linux/UNIX стандарт с make V=1.

  1. Проблему у себя пробуй решить созданием симлинка.

Вот смотри:

PS. Файлы libXxf86vm.so.1 и libXxf86vm.so.1.0.0 в /usr/lib/x86_64-linux-gnu/ присутствуют.

Библиотеки эти есть, но убраны из прямой линковки. По флажку -lXxf86vm линкуется оно к libXxf86vm.so, которой у тебя нет (она не ставится из пакета).

Поэтому в твоём случае пробуй сделать так:

cd /usr/lib/x86_64-linux-gnu/
sudo ln -s libXxf86vm.so.1.0.0 libXxf86vm.so

И перезапустить сборку. Удачи!

Не забудь потом удалить симлинк, потому что решение «грязное». Оставлять внутри /usr/lib файлы, которые не контролирует пакетный менеджер – плохой тон.

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

только что установил себе libxxf86vm-dev_1.1.4-1build3_amd64.deb и libxxf86vm1_1.1.4-1build3_amd64.deb - симлинк появился сам, и ld нашёл, что хотел

ld -lXxf86vm –verbose | grep succ
attempt to open /lib/x86_64-linux-gnu/libXxf86vm.so succeeded

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

Спасибо за быстрые ответы! Неожидал.

Сделал:

cd /usr/lib/x86_64-linux-gnu/
sudo ln -s libXxf86vm.so.1.0.0 libXxf86vm.so

Получил (по моему еще хуже, стало непонятней):

make
[  1%] Built target ext_unzip
[  3%] Built target ext_recast
[  3%] Built target ext_tinyxml2
[  3%] Built target ext_xxhash
[  3%] Built target ext_xxtea
[  3%] Built target ext_clipper
[  4%] Built target ext_edtaa3func
[  4%] Built target ext_convertUTF
[  4%] Built target ext_poly2tri
[  5%] Built target ext_md5
[  5%] Built target external
[ 70%] Built target cocos2d
[ 71%] Built target ext_tolua
[ 72%] Built target ext_luasocket
[ 79%] Built target luacocos2d
[ 84%] Built target jscocos2d
[ 84%] Linking CXX executable ../../../bin/cpp-empty-test/cpp-empty-test
/usr/bin/ld: ../../../../external/linux-specific/fmod/prebuilt/64-bit/libfmod.so: .dynsym local symbol at index 2 (>= sh_info of 2)
/usr/bin/ld: ../../../../external/linux-specific/fmod/prebuilt/64-bit/libfmod.so: .dynsym local symbol at index 3 (>= sh_info of 2)
/usr/bin/ld: ../../../../external/linux-specific/fmod/prebuilt/64-bit/libfmod.so: .dynsym local symbol at index 4 (>= sh_info of 2)
/usr/bin/ld: ../../../../external/freetype2/prebuilt/linux/64-bit/libfreetype.a(ftbase.linux64.o): relocation R_X86_64_32 against `.rodata' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: ../../../../external/freetype2/prebuilt/linux/64-bit/libfreetype.a(ftinit.linux64.o): relocation R_X86_64_32 against symbol `tt_driver_class' can not be used when making a PIE object; recompile with -fPIE
...
/usr/bin/ld: ../../../../external/freetype2/prebuilt/linux/64-bit/libfreetype.a(pshinter.linux64.o): relocation R_X86_64_32S against `.text' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: ../../../../external/freetype2/prebuilt/linux/64-bit/libfreetype.a(ftglyph.linux64.o): relocation R_X86_64_32S against symbol `ft_bitmap_glyph_class' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: ../../../../external/freetype2/prebuilt/linux/64-bit/libfreetype.a(ftstroke.linux64.o): relocation R_X86_64_32S against symbol `ft_outline_glyph_class' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: ../../../../external/freetype2/prebuilt/linux/64-bit/libfreetype.a(ftgzip.linux64.o): relocation R_X86_64_32S against `.rodata.str1.1' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: ../../../../external/freetype2/prebuilt/linux/64-bit/libfreetype.a(ftlzw.linux64.o): relocation R_X86_64_32S against `.text' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: ../../../../external/freetype2/prebuilt/linux/64-bit/libfreetype.a(ftbitmap.linux64.o): relocation R_X86_64_32S against `.rodata' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpGearJoint.c.o): in function `preStep':
cpGearJoint.c:(.text+0x144): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpDampedSpring.c.o): in function `preStep':
cpDampedSpring.c:(.text+0x1fd): undefined reference to `__expf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpRotaryLimitJoint.c.o): in function `preStep':
cpRotaryLimitJoint.c:(.text+0x17d): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpDampedRotarySpring.c.o): in function `preStep':
cpDampedRotarySpring.c:(.text+0xf2): undefined reference to `__expf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpGrooveJoint.c.o): in function `preStep':
cpGrooveJoint.c:(.text+0x327): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpSlideJoint.c.o): in function `preStep':
cpSlideJoint.c:(.text+0x42b): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpPivotJoint.c.o): in function `preStep':
cpPivotJoint.c:(.text+0x1e8): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpRatchetJoint.c.o): in function `preStep':
cpRatchetJoint.c:(.text+0x16a): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpPinJoint.c.o): in function `preStep':
cpPinJoint.c:(.text+0x324): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpHastySpace.c.o):cpHastySpace.c:(.text+0x560): more undefined references to `__powf_finite' follow
collect2: error: ld returned 1 exit status
make[2]: *** [engine/tests/cpp-empty-test/CMakeFiles/cpp-empty-test.dir/build.make:153: bin/cpp-empty-test/cpp-empty-test] Error 1
make[1]: *** [CMakeFiles/Makefile2:1292: engine/tests/cpp-empty-test/CMakeFiles/cpp-empty-test.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

PS Ubuntu 20.04, 64-разрядная

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

Не совсем понял, что показывать? Резутьтат команды?

 ls -al /lib/x86_64-linux-gnu/libXxf86vm.so

А как вы себе эти е libxxf86vm-dev_1.1.4-1build3_amd64.deb и libxxf86vm1_1.1.4-1build3_amd64.deb библиотеки установили?

Вручную скачав *.deb и правой кнопкой -> «Open With Software Install»?

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

__powf_finite

И прочие из-за отсутствия линковки -lm

can not be used when making a PIE object; recompile with -fPIE

Из-за того что примеры видимо древние или либы эти скомпиленные древние которые валяются тут – external/freetype2/prebuilt/linux/64-bit/libfreetype.a.

Пробуй компилировать с флагом -no-pie

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

Вообще-то - это cocos2d-x 3.17.2 и стоит дата May.21 2019 - не такой уж древний (хотя сама библиотека libfreetype.a - в includ-ах 2014 последний год). А куда мне этот флаг приставить? Вроде есть для CMake настройка,

target_compile_options(main PRIVATE -fpie)

но опять же куда ее вставлять, в какой CMakeLists.txt, в тот который находится в папке с примерами, т.е. уровнем ниже, того CMakeLists-та который в корне cocos2d-x-3.17.2/?

PS Мне интересно, а сами кокосники собирали свою библиотеку вместе с примерами? Вопрос риторический.

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

Скачал cocos2d-x-4.0. Попытка сборки, библиотеки - OK.

...
[ 83%] Built target luacocos2d
Scanning dependencies of target SYNC_RESOURCE-cpp-empty-test
Copying resources for cpp-empty-test ...
    copying to /home/bark/cocos2d-x-4.0/linux-build/bin/cpp-empty-test/Resources
  Create /home/bark/cocos2d-x-4.0/linux-build/bin/cpp-empty-test/Resources/ipad/CloseSelected.png
  Create /home/bark/cocos2d-x-4.0/linux-build/bin/cpp-empty-test/Resources/ipad/uv_checker_01.jpg
  Create /home/bark/cocos2d-x-4.0/linux-build/bin/cpp-empty-test/Resources/ipad/CloseNormal.png
  ...
  0 items updated, 35 items created 
  takes 0.0064001083374 seconds
[ 83%] Built target SYNC_RESOURCE-cpp-empty-test
Scanning dependencies of target cpp-empty-test
[ 83%] Building CXX object engine/tests/cpp-empty-test/CMakeFiles/cpp-empty-test.dir/Classes/AppDelegate.cpp.o
[ 83%] Building CXX object engine/tests/cpp-empty-test/CMakeFiles/cpp-empty-test.dir/Classes/HelloWorldScene.cpp.o
[ 83%] Building CXX object engine/tests/cpp-empty-test/CMakeFiles/cpp-empty-test.dir/proj.linux/main.cpp.o
[ 83%] Linking CXX executable ../../../bin/cpp-empty-test/cpp-empty-test
/usr/bin/ld: ../../../../external/linux-specific/fmod/prebuilt/64-bit/libfmod.so: .dynsym local symbol at index 2 (>= sh_info of 2)
/usr/bin/ld: ../../../../external/linux-specific/fmod/prebuilt/64-bit/libfmod.so: .dynsym local symbol at index 3 (>= sh_info of 2)
/usr/bin/ld: ../../../../external/linux-specific/fmod/prebuilt/64-bit/libfmod.so: .dynsym local symbol at index 4 (>= sh_info of 2)
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpGearJoint.c.o): in function `preStep':
cpGearJoint.c:(.text+0x144): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpDampedSpring.c.o): in function `preStep':
cpDampedSpring.c:(.text+0x1fd): undefined reference to `__expf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpRotaryLimitJoint.c.o): in function `preStep':
cpRotaryLimitJoint.c:(.text+0x17d): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpDampedRotarySpring.c.o): in function `preStep':
cpDampedRotarySpring.c:(.text+0xf2): undefined reference to `__expf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpGrooveJoint.c.o): in function `preStep':
cpGrooveJoint.c:(.text+0x327): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpSlideJoint.c.o): in function `preStep':
cpSlideJoint.c:(.text+0x42b): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpPivotJoint.c.o): in function `preStep':
cpPivotJoint.c:(.text+0x1e8): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpRatchetJoint.c.o): in function `preStep':
cpRatchetJoint.c:(.text+0x16a): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpPinJoint.c.o): in function `preStep':
cpPinJoint.c:(.text+0x324): undefined reference to `__powf_finite'
/usr/bin/ld: ../../../../external/chipmunk/prebuilt/linux/64-bit/libchipmunk.a(cpHastySpace.c.o):cpHastySpace.c:(.text+0x560): more undefined references to `__powf_finite' follow
collect2: error: ld returned 1 exit status
make[2]: *** [engine/tests/cpp-empty-test/CMakeFiles/cpp-empty-test.dir/build.make:152: bin/cpp-empty-test/cpp-empty-test] Error 1
make[1]: *** [CMakeFiles/Makefile2:1233: engine/tests/cpp-empty-test/CMakeFiles/cpp-empty-test.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

Примеры по-прежнему не компилируются. А библиотеки и хедеры мне самому вручную помещать в

/usr/local/lib/
/usr/local/include/

?, т.к.

sudo make install

не сработал.

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

Решено!

Похоже, что libchipmunk 7 использует быструю версию функции power, которая отменена в новом glibc.
Перекомпиляция libchipmunk 7.0.1 без быстрой математики путем удаления --ffast-math в libchipmunk/CMakeLists.txt (вам придется загрузить его вручную) и замены той, что находится в cocos2d-x, решит эту проблему.

Вот предварительно скомпилированный файл с использованием метода, упомянутого выше. x86_64, gcc 9.2.1
libchipmunk7.0.1.zip

https://github.com/cocos2d/cocos2d-x/issues/20471

Теперь все компилируется и собирается: cocos2d-x-4.0 for Linux

Спасибо, всем кто помогал!

PS Жаль, что в cocos2d-x этот ужасный cmake используется.

Gyros
() автор топика