Flatpak-builder cmake cannot link external library

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.