Linux build is failing

Hi
I thought it would be a good idea to update to the latest Sonic Pi version, so I git-pulled and fetched in my repo only to find out that the way to build as described here seems to be no longer valid, as these instructions talk about executing script linux-build-all.sh, which no longer exists. Instead it has a file named linux-prebuild.sh, so I opened BUILD-LINUX.md from my checkout folder, which reads I should linux-prebuild.sh followed by linux-config.sh, then cd into folder build and run “cmake --build . --config Release”. Although the output of this last command looks good:

[ 93%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/osc/sonic_pi_tcp_osc_server.cpp.o
[ 94%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/widgets/infowidget.cpp.o
[ 94%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/widgets/settingswidget.cpp.o
[ 95%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/mainwindow.cpp.o
[ 95%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/model/sonicpitheme.cpp.o
[ 95%] Building C object gui/qt/CMakeFiles/sonic-pi.dir/__/__/external/kiss_fft/kiss_fft.c.o
[ 96%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/visualizer/scope.cpp.o
[ 96%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/main.cpp.o
[ 97%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/utils/sonicpiapis.cpp.o
[ 97%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/widgets/sonicpilog.cpp.o
[ 98%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/widgets/sonicpicontext.cpp.o
[ 98%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/widgets/sonicpiscintilla.cpp.o
[ 98%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/widgets/sonicpilexer.cpp.o
[ 99%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/sonic-pi_autogen/EWIEGA46WW/qrc_SonicPi.cpp.o
[ 99%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/sonic-pi_autogen/EWIEGA46WW/qrc_help_files.cpp.o
[100%] Building CXX object gui/qt/CMakeFiles/sonic-pi.dir/sonic-pi_autogen/EWIEGA46WW/qrc_info_files.cpp.o
[100%] Linking CXX executable sonic-pi
[100%] Built target sonic-pi

… it doesn’t work. File BUILD-LINUX.md goes on to read:

“Finally, you can run your newly compiled Sonic Pi app within the build
directly either by double clicking it in the Finder or via the terminal
(from within the build directory)”

But there is no file sonic-pi in the build directory and nowhere else either. There continues to be executable sonic-pi in the app folder from my previous build, as I can tell by the timestamp. But I searched the entire repository, and it didn’t build an executable named sonic-pi!

Thanks,

Martin

Hi @sancho1980,

sorry you’re having issues building on Linux. However, we try and keep these forums for conversation about using Sonic Pi.

For development/building discussion, please could you head over to Issues · sonic-pi-net/sonic-pi · GitHub where we’d be happy to chat with you and try out best to help you get up and running.

Thanks!

hi @sancho1980

Would you please tell us what is your linux distribution ?
Cheers

Hi @nlb ,
I’m on Ubuntu 22.04.1 LTS.

After switching to the stable branch, I’m now able to compile when issuing “linux-build-all.sh -s” option.
If I fail to supply -s, I am getting funny errors about unofficial:: packages which cannot be found.

But when I get to linking stage, I get this error:

[ 32%] Linking CXX executable sonic-pi
cd /home/sancho/Desktop/github/sonic-pi/app/build/gui/qt && /usr/bin/cmake -E cmake_link_script CMakeFiles/sonic-pi.dir/link.txt --verbose=1
/usr/bin/c++ -rdynamic CMakeFiles/sonic-pi.dir/sonic-pi_autogen/mocs_compilation.cpp.o CMakeFiles/sonic-pi.dir/widgets/infowidget.cpp.o CMakeFiles/sonic-pi.dir/widgets/settingswidget.cpp.o CMakeFiles/sonic-pi.dir/widgets/bpmscrubwidget.cpp.o CMakeFiles/sonic-pi.dir/mainwindow.cpp.o CMakeFiles/sonic-pi.dir/model/sonicpitheme.cpp.o CMakeFiles/sonic-pi.dir/main.cpp.o CMakeFiles/sonic-pi.dir/utils/scintilla_api.cpp.o CMakeFiles/sonic-pi.dir/utils/sonicpi_i18n.cpp.o CMakeFiles/sonic-pi.dir/widgets/sonicpilog.cpp.o CMakeFiles/sonic-pi.dir/widgets/sonicpicontext.cpp.o CMakeFiles/sonic-pi.dir/widgets/sonicpimetro.cpp.o CMakeFiles/sonic-pi.dir/widgets/timewarpedit.cpp.o CMakeFiles/sonic-pi.dir/widgets/sonicpieditor.cpp.o CMakeFiles/sonic-pi.dir/widgets/sonicpiscintilla.cpp.o CMakeFiles/sonic-pi.dir/widgets/sonicpilexer.cpp.o CMakeFiles/sonic-pi.dir/qt_api_client.cpp.o CMakeFiles/sonic-pi.dir/visualizer/scope_window.cpp.o CMakeFiles/sonic-pi.dir/sonic-pi_autogen/EWIEGA46WW/qrc_SonicPi.cpp.o CMakeFiles/sonic-pi.dir/sonic-pi_autogen/EWIEGA46WW/qrc_help_files.cpp.o CMakeFiles/sonic-pi.dir/sonic-pi_autogen/EWIEGA46WW/qrc_info_files.cpp.o -o sonic-pi  -Wl,-rpath,/usr/local/lib ../../api/libsonic-pi-api.a /usr/lib/x86_64-linux-gnu/libqscintilla2.so /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5.15.3 /usr/lib/x86_64-linux-gnu/libQt5Concurrent.so.5.15.3 /usr/lib/x86_64-linux-gnu/libQt5Network.so.5.15.3 -lrt /usr/local/lib/libplatform_folders.a /usr/local/lib/libreproc++.a /usr/local/lib/libreproc.a /usr/local/lib/libkissfft-float.so -lstdc++fs -lrt /usr/local/lib/libcrossguid.a -luuid /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.15.3 /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.15.3 /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.15.3 
/usr/bin/ld: CMakeFiles/sonic-pi.dir/sonic-pi_autogen/mocs_compilation.cpp.o:(.data.rel.ro._ZTV16SonicPiScintilla[_ZTV16SonicPiScintilla]+0xc8): undefined reference to `QsciScintilla::wheelEvent(QWheelEvent*)'
/usr/bin/ld: CMakeFiles/sonic-pi.dir/sonic-pi_autogen/mocs_compilation.cpp.o:(.data.rel.ro._ZTV16SonicPiScintilla[_ZTV16SonicPiScintilla]+0x1f0): undefined reference to `QsciScintilla::findFirst(QString const&, bool, bool, bool, bool, bool, int, int, bool, bool, bool)'
/usr/bin/ld: CMakeFiles/sonic-pi.dir/sonic-pi_autogen/mocs_compilation.cpp.o:(.data.rel.ro._ZTV16SonicPiScintilla[_ZTV16SonicPiScintilla]+0x1f8): undefined reference to `QsciScintilla::findFirstInSelection(QString const&, bool, bool, bool, bool, bool, bool, bool)'
/usr/bin/ld: CMakeFiles/sonic-pi.dir/sonic-pi_autogen/mocs_compilation.cpp.o:(.data.rel.ro._ZTV16SonicPiScintilla[_ZTV16SonicPiScintilla]+0x330): undefined reference to `QsciScintilla::setCaretLineFrameWidth(int)'
collect2: error: ld returned 1 exit status
gmake[2]: *** [gui/qt/CMakeFiles/sonic-pi.dir/build.make:3917: gui/qt/sonic-pi] Error 1
gmake[2]: Leaving directory '/home/sancho/Desktop/fromOld/github/sonic-pi/app/build'
gmake[1]: *** [CMakeFiles/Makefile2:349: gui/qt/CMakeFiles/sonic-pi.dir/all] Error 2
gmake[1]: Leaving directory '/home/sancho/Desktop/fromOld/github/sonic-pi/app/build'
gmake: *** [Makefile:91: all] Error 2

I do have an installation of this libqscintilla:

sancho@extSsd:~/Desktop/github/sonic-pi/app$ dpkg -l | grep cintilla
pi  libqscintilla2-qt5-15                         2.11.6+dfsg-4                           amd64        Qt5 port of the Scintilla source code editing widget
ii  libqscintilla2-qt5-dev:amd64                  2.11.6+dfsg-4                           amd64        Scintilla source code editing widget for Qt5, development files
pi  libqscintilla2-qt5-l10n                       2.11.6+dfsg-4                           all          Scintilla source code editing widget for Qt5, translation files

I noticed folder app/gui/qt/QScintilla_src-2.13.3 with a cmake project, and after building it I noticed it provides these symbols:

sancho@extSsd:~/Desktop/github/sonic-pi/app$ nm -an gui/qt/QScintilla_src-2.13.3/libQScintilla.a | c++filt | grep QsciScintilla::wheelEvent
000000000000abf2 T QsciScintilla::wheelEvent(QWheelEvent*)

So I manually added this library to the linker command:

sancho@extSsd:~/Desktop/github/sonic-pi/app/build/gui/qt$ /usr/bin/c++ -rdynamic CMakeFiles/sonic-pi.dir/sonic-pi_autogen/mocs_compilation.cpp.o CMakeFiles/sonic-pi.dir/widgets/infowidget.cpp.o CMakeFiles/sonic-pi.dir/widgets/settingswidget.cpp.o CMakeFiles/sonic-pi.dir/widgets/bpmscrubwidget.cpp.o CMakeFiles/sonic-pi.dir/mainwindow.cpp.o CMakeFiles/sonic-pi.dir/model/sonicpitheme.cpp.o CMakeFiles/sonic-pi.dir/main.cpp.o CMakeFiles/sonic-pi.dir/utils/scintilla_api.cpp.o CMakeFiles/sonic-pi.dir/utils/sonicpi_i18n.cpp.o CMakeFiles/sonic-pi.dir/widgets/sonicpilog.cpp.o CMakeFiles/sonic-pi.dir/widgets/sonicpicontext.cpp.o CMakeFiles/sonic-pi.dir/widgets/sonicpimetro.cpp.o CMakeFiles/sonic-pi.dir/widgets/timewarpedit.cpp.o CMakeFiles/sonic-pi.dir/widgets/sonicpieditor.cpp.o CMakeFiles/sonic-pi.dir/widgets/sonicpiscintilla.cpp.o CMakeFiles/sonic-pi.dir/widgets/sonicpilexer.cpp.o CMakeFiles/sonic-pi.dir/qt_api_client.cpp.o CMakeFiles/sonic-pi.dir/visualizer/scope_window.cpp.o CMakeFiles/sonic-pi.dir/sonic-pi_autogen/EWIEGA46WW/qrc_SonicPi.cpp.o CMakeFiles/sonic-pi.dir/sonic-pi_autogen/EWIEGA46WW/qrc_help_files.cpp.o CMakeFiles/sonic-pi.dir/sonic-pi_autogen/EWIEGA46WW/qrc_info_files.cpp.o -o sonic-pi  -Wl,-rpath,/usr/local/lib ../../api/libsonic-pi-api.a ../../../gui/qt/QScintilla_src-2.13.3/libQScintilla.a /usr/lib/x86_64-linux-gnu/libqscintilla2.so /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5.15.3 /usr/lib/x86_64-linux-gnu/libQt5Concurrent.so.5.15.3 /usr/lib/x86_64-linux-gnu/libQt5Network.so.5.15.3 -lrt /usr/local/lib/libplatform_folders.a /usr/local/lib/libreproc++.a /usr/local/lib/libreproc.a /usr/local/lib/libkissfft-float.so -lstdc++fs -lrt /usr/local/lib/libcrossguid.a -luuid /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.15.3 /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.15.3 /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.15.3
/usr/bin/ld: ../../../gui/qt/QScintilla_src-2.13.3/libQScintilla.a(qsciscintilla.o): in function `QsciScintilla::handleMarginRightClick(int, int, int)':
qsciscintilla.cpp:(.text+0x53db): undefined reference to `QsciScintilla::marginRightClicked(int, int, QFlags<Qt::KeyboardModifier>)'
/usr/bin/ld: ../../../gui/qt/QScintilla_src-2.13.3/libQScintilla.a(qsciscintillabase.o): in function `QsciScintillaBase::dropEvent(QDropEvent*)':
qsciscintillabase.cpp:(.text+0x1c03): undefined reference to `QsciScintillaBase::SCN_URIDROPPED(QUrl const&)'
/usr/bin/ld: ../../../gui/qt/QScintilla_src-2.13.3/libQScintilla.a(ScintillaQt.o): in function `QsciScintillaQt::NotifyParent(SCNotification)':
ScintillaQt.cpp:(.text+0xaef): undefined reference to `QsciScintillaBase::SCN_AUTOCCOMPLETED(char const*, int, int, int)'
/usr/bin/ld: ScintillaQt.cpp:(.text+0xb23): undefined reference to `QsciScintillaBase::SCN_AUTOCSELECTION(char const*, int, int, int)'
/usr/bin/ld: ScintillaQt.cpp:(.text+0xb69): undefined reference to `QsciScintillaBase::SCN_AUTOCSELECTIONCHANGE(char const*, int, int)'
/usr/bin/ld: ScintillaQt.cpp:(.text+0xd4b): undefined reference to `QsciScintillaBase::SCN_MARGINRIGHTCLICK(int, int, int)'
/usr/bin/ld: ScintillaQt.cpp:(.text+0xfa0): undefined reference to `QsciScintillaBase::SCN_USERLISTSELECTION(char const*, int, int, int, int)'
/usr/bin/ld: ScintillaQt.cpp:(.text+0xfc9): undefined reference to `QsciScintillaBase::SCN_USERLISTSELECTION(char const*, int, int, int)'

It’s complaining about yet more undefined symbols. How is this even meant to be built?

Thanks,
Martin

Hi @sancho1980,

please could you head over to Issues · sonic-pi-net/sonic-pi · GitHub where we’d be happy to discuss this and try and help you find a fix.

I’d like to keep these forums for conversation about using Sonic Pi rather than development discussion.