Hi,
I’ve tried to use flatpak-builder with cmake as buildsystem and try to link an external library. It build successfully with cmake directly, but with flatpak-builder it shows
the following error:
[ 97%] Linking CXX executable blink
/usr/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/../../../../x86_64-unknown-linux-gnu/bin/ld: cannot find -lqscintilla2_qt6: No such file or directory
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/blink.dir/build.make:668: blink] Error 1
make[1]: *** [CMakeFiles/Makefile2:86: CMakeFiles/blink.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
Error: module blink: Child process exited with code 2
My build file, blink.yml
id: org.flatpak.blink
runtime: org.kde.Platform
runtime-version: '6.6'
sdk: org.kde.Sdk
finish-args:
- --share=ipc
- --socket=fallback-x11
- --socket=wayland
- --device=dri
modules:
- name: blink
buildsystem: cmake
config-opts:
- LIBS+=-L/opt/QScintilla_src-2.14.1/src
sources:
- type: dir
path: /opt/blink
- type: dir
path: /opt/QScintilla_src-2.14.1/src/
And the CMakelist.txt
cmake_minimum_required(VERSION 3.1.0)
project(blink VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
if(CMAKE_VERSION VERSION_LESS "3.7.0")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
endif()
find_package(Qt6 COMPONENTS Widgets Xml Network REQUIRED)
set(CMAKE_AUTOUIC_SEARCH_PATHS Resources/Forms)
include_directories(. Utils /opt/QScintilla_src-2.14.1/src)
link_directories (/opt/QScintilla_src-2.14.1/src)
add_executable(blink
Resources/Forms/mainWindow.ui
Resources/Forms/editor.ui
Resources/Forms/projectDialog.ui
Resources/Forms/groupDialog.ui
Resources/Forms/aboutDialog.ui
Resources/Forms/configDialog.ui
Resources/Forms/findReplaceDialog.ui
Resources/Forms/editorFindDialog.ui
Resources/app.qrc
Resources/Icons/appIcons.rc
main.cpp
Utils/CUtils.cpp
Display/CMainWindow.cpp
Display/CEditor.cpp
Display/CEditorFindDlg.cpp
Display/CProjectDlg.cpp
Display/CAboutDlg.cpp
Display/CProjectListWidget.cpp
Display/CFileListWidget.cpp
Display/CConfigDlg.cpp
Display/CEventFilterObj.cpp
Display/CSearchTextBrowser.cpp
Display/CSearchTextEdit.cpp
Display/CFindReplaceDlg.cpp
Model/qTagger/CTagItem.cpp
Model/qTagger/CTagFileRecord.cpp
Model/qTagger/CTagResultItem.cpp
Model/qTagger/qTagger.cpp
Model/qTagger/CSourceFileList.cpp
Model/qFindReplacer/qFindReplacer.cpp
Model/CProjectListModel.cpp
Model/CFileListModel.cpp
Model/CProjectManager.cpp
Model/CProjectUpdateThread.cpp
Model/CProjectLoadThread.cpp
Model/CConfigManager.cpp
Model/CProjectItem.cpp
Model/CFileItem.cpp
Model/CRunCommand.cpp
Model/CFindReplaceModel.cpp
Storage/CXmlStorageHandler.cpp
)
target_link_libraries(blink Qt6::Widgets Qt6::Xml Qt6::Network qscintilla2_qt6)
Anyone has idea for that? Thanks a lot!
Regards,
Jan
I think you should get rid of /opt and make it a relative link
Thanks for the suggestion. I’ve changed it to relative path but it still not success.
I think you should compile QScintilla separately like in one of these files:
https://github.com/search?q=org%3Aflathub+qscintilla&type=code
Thanks a lot for the suggestion! The QScintilla library can now be linked. But where can I find the output file? I’m not sure if it generate one. I’ve modified as follows:
CMakeLists.txt
cmake_minimum_required(VERSION 3.1.0)
project(blink VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
if(CMAKE_VERSION VERSION_LESS "3.7.0")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
endif()
find_package(Qt6 COMPONENTS Widgets Xml Network REQUIRED)
set(CMAKE_AUTOUIC_SEARCH_PATHS Resources/Forms)
include_directories(. Utils /opt/QScintilla_src-2.14.1/src)
link_directories (/opt/QScintilla_src-2.14.1/src)
add_executable(blink
Resources/Forms/mainWindow.ui
Resources/Forms/editor.ui
Resources/Forms/projectDialog.ui
Resources/Forms/groupDialog.ui
Resources/Forms/aboutDialog.ui
Resources/Forms/configDialog.ui
Resources/Forms/findReplaceDialog.ui
Resources/Forms/editorFindDialog.ui
Resources/app.qrc
Resources/Icons/appIcons.rc
main.cpp
Utils/CUtils.cpp
Display/CMainWindow.cpp
Display/CEditor.cpp
Display/CEditorFindDlg.cpp
Display/CProjectDlg.cpp
Display/CAboutDlg.cpp
Display/CProjectListWidget.cpp
Display/CFileListWidget.cpp
Display/CConfigDlg.cpp
Display/CEventFilterObj.cpp
Display/CSearchTextBrowser.cpp
Display/CSearchTextEdit.cpp
Display/CFindReplaceDlg.cpp
Model/qTagger/CTagItem.cpp
Model/qTagger/CTagFileRecord.cpp
Model/qTagger/CTagResultItem.cpp
Model/qTagger/qTagger.cpp
Model/qTagger/CSourceFileList.cpp
Model/qFindReplacer/qFindReplacer.cpp
Model/CProjectListModel.cpp
Model/CFileListModel.cpp
Model/CProjectManager.cpp
Model/CProjectUpdateThread.cpp
Model/CProjectLoadThread.cpp
Model/CConfigManager.cpp
Model/CProjectItem.cpp
Model/CFileItem.cpp
Model/CRunCommand.cpp
Model/CFindReplaceModel.cpp
Storage/CXmlStorageHandler.cpp
)
target_link_libraries(blink Qt6::Widgets Qt6::Xml Qt6::Network qscintilla2_qt6)
set(CMAKE_INSTALL_PREFIX /opt/blinkApp)
install(TARGETS blink
DESTINATION ${CMAKE_INSTALL_PREFIX}
)
blink.yml
id: org.flatpak.blink
runtime: org.kde.Platform
runtime-version: '6.6'
sdk: org.kde.Sdk
finish-args:
- --share=ipc
- --socket=fallback-x11
- --socket=wayland
- --device=dri
build-options:
prepend-ld-library-path: /opt/QScintilla_src-2.14.1/src
modules:
- name: qscintilla
buildsystem: qmake
subdir: src
sources:
- type: archive
url: https://www.riverbankcomputing.com/static/Downloads/QScintilla/2.13.4/QScintilla_src-2.13.4.tar.gz
sha256: 890c261f31e116f426b0ea03a136d44fc89551ebfd126d7b0bdf8a7197879986
- type: patch
path: qscintilla-lib-paths.patch
- name: blink
buildsystem: cmake
builddir: true
config-opts:
- -DCMAKE_BUILD_TYPE=RelWithDebInfo
- -DCMAKE_INSTALL_LIBDIR:PATH=/app/lib
sources:
- type: dir
path: /opt/blink
Console:
[ 83%] Building CXX object CMakeFiles/blink.dir/Model/CFileItem.cpp.o
[ 86%] Building CXX object CMakeFiles/blink.dir/Model/CRunCommand.cpp.o
[ 89%] Building CXX object CMakeFiles/blink.dir/Model/CFindReplaceModel.cpp.o
[ 91%] Building CXX object CMakeFiles/blink.dir/Storage/CXmlStorageHandler.cpp.o
[ 94%] Building CXX object CMakeFiles/blink.dir/blink_autogen/S5YYZ2ZCNV/qrc_app.cpp.o
[ 97%] Linking CXX executable blink
[100%] Built target blink
[ 0%] Built target blink_autogen_timestamp_deps
[ 2%] Built target blink_autogen
[100%] Built target blink
Install the project...
-- Install configuration: "RelWithDebInfo"
-- Installing: /opt/blinkApp/blink
-- Set non-toolchain portion of runtime path of "/opt/blinkApp/blink" to ""
Committing stage build-blink to cache
Cleaning up
Committing stage cleanup to cache
Finishing app
No executable found
Please review the exported files and the metadata
Committing stage finish to cache
Pruning cache
Get rid of /opt. It’s not a valid path in anyway. Amd it doesn’t belong anywhere in prepend-ld-library-path because that doesn’t exist inside the sandbox. Also I’m pretty this doesn’t do what you think it does.
The default build set the prefix to /app.