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

Ladybird partially uses system icu #3836

Open
1 task
dmage opened this issue Mar 6, 2025 · 4 comments
Open
1 task

Ladybird partially uses system icu #3836

dmage opened this issue Mar 6, 2025 · 4 comments

Comments

@dmage
Copy link

dmage commented Mar 6, 2025

Summary

Ladybird fails to start with the error liblagom-unicode.so.0: undefined symbol: _ZTVN6icu_7613UnicodeStringE after successful compilation. Apparently the compiler uses the vendored headers for icu, but the linker uses the system libraries.

$ icu-config --version
76.1
$ grep -i icu ./Build/release/CMakeCache.txt | grep -i '^[a-z]'
ICU_DATA_LIBRARY_DEBUG:FILEPATH=ICU_DATA_LIBRARY_DEBUG-NOTFOUND
ICU_DATA_LIBRARY_RELEASE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libicudata.so
ICU_DERB_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/derb
ICU_GENBRK_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/genbrk
ICU_GENCCODE_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/genccode
ICU_GENCFU_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/gencfu
ICU_GENCMN_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/gencmn
ICU_GENCNVAL_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/gencnval
ICU_GENDICT_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/gendict
ICU_GENNORM2_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/gennorm2
ICU_GENRB_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/genrb
ICU_GENSPREP_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/gensprep
ICU_I18N_LIBRARY_DEBUG:FILEPATH=ICU_I18N_LIBRARY_DEBUG-NOTFOUND
ICU_I18N_LIBRARY_RELEASE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libicui18n.so
ICU_ICU-CONFIG_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/icu-config
ICU_ICUINFO_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/icuinfo
ICU_ICUPKG_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/icupkg
ICU_INCLUDE_DIR:PATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/include
ICU_MAKECONV_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/makeconv
ICU_MAKEFILE_INC:FILEPATH=/usr/lib64/icu/76.1/Makefile.inc
ICU_PKGDATA_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/pkgdata
ICU_PKGDATA_INC:FILEPATH=/usr/lib64/icu/76.1/pkgdata.inc
ICU_UCONV_EXECUTABLE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/icu/bin/uconv
ICU_UC_LIBRARY_DEBUG:FILEPATH=ICU_UC_LIBRARY_DEBUG-NOTFOUND
ICU_UC_LIBRARY_RELEASE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libicuuc.so
z_vcpkg_skia_link_libs_icuuc_RELEASE:FILEPATH=/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libicuuc.so
FIND_PACKAGE_MESSAGE_DETAILS_ICU:INTERNAL=[/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/include][/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libicuuc.so][cfound components: uc ][v76.1(61)]
ICU_DATA_LIBRARY_DEBUG-ADVANCED:INTERNAL=1
ICU_DATA_LIBRARY_RELEASE-ADVANCED:INTERNAL=1
ICU_DERB_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_GENBRK_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_GENCCODE_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_GENCFU_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_GENCMN_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_GENCNVAL_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_GENDICT_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_GENNORM2_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_GENRB_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_GENSPREP_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_I18N_LIBRARY_DEBUG-ADVANCED:INTERNAL=1
ICU_I18N_LIBRARY_RELEASE-ADVANCED:INTERNAL=1
ICU_ICU-CONFIG_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_ICUINFO_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_ICUPKG_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_INCLUDE_DIR-ADVANCED:INTERNAL=1
ICU_MAKECONV_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_MAKEFILE_INC-ADVANCED:INTERNAL=1
ICU_PKGDATA_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_PKGDATA_INC-ADVANCED:INTERNAL=1
ICU_UCONV_EXECUTABLE-ADVANCED:INTERNAL=1
ICU_UC_LIBRARY_DEBUG-ADVANCED:INTERNAL=1
ICU_UC_LIBRARY_RELEASE-ADVANCED:INTERNAL=1
QT_FEATURE_icu:INTERNAL=ON
z_vcpkg_skia_link_libs_icuuc_RELEASE-ADVANCED:INTERNAL=1

Operating system

Linux

Steps to reproduce

ladybird (master)$ git clean -xdf
ladybird (master)$ git describe --always --dirty
02a642b87b
ladybird (master)$ ./Meta/ladybird.sh run 
Cloning into 'vcpkg'...
...
-- Running vcpkg install - done
-- The C compiler identification is GNU 14.2.1
-- The CXX compiler identification is GNU 14.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Removing outdated /home/user/src/github.com/LadybirdBrowser/ladybird/Build/caches/CACERT for version 2023-12-12
-- Downloading file cacert-2023-12-12.pem from https://curl.se/ca/cacert-2023-12-12.pem
-- Performing Test LAGOM_LINKER_SUPPORTS_LINKER:--gdb-index
-- Performing Test LAGOM_LINKER_SUPPORTS_LINKER:--gdb-index - Success
-- Performing Test LAGOM_LINKER_SUPPORTS_LINKER:-Bsymbolic-non-weak-functions
-- Performing Test LAGOM_LINKER_SUPPORTS_LINKER:-Bsymbolic-non-weak-functions - Success
-- Looking for backtrace
-- Looking for backtrace - found
-- backtrace facility detected in default set of libraries
-- Found Backtrace: /usr/include
-- Found OpenSSL: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libcrypto.so (found version "3.4.0")
-- Found ICU: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/include (found suitable version "76.1", minimum required is "76") found components: data i18n uc
-- Downloading file public_suffix_list.dat from https://raw.githubusercontent.com/publicsuffix/list/master/public_suffix_list.dat
-- Found Fontconfig: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libfontconfig.so (found version "2.14.2")
-- Found ZLIB: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libz.so (found version "1.3.1")
-- Found EXPAT: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libexpat.so (found version "2.6.4")
-- Found Python3: /usr/bin/python3.13 (found version "3.13.2") found components: Interpreter
-- Found PkgConfig: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/tools/pkgconf/pkgconf (found version "2.3.0")
-- Checking for module 'libwoff2dec'
--   Found libwoff2dec, version 1.0.2
-- Found JPEG: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libjpeg.so (found version "62")
-- Found PNG: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libpng16.so (found version "1.6.45")
-- Found ICU: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/include (found suitable version "76.1", minimum required is "61") found components: uc
-- Checking for module 'libjxl'
--   Found libjxl, version 0.11.1
-- Checking for module 'libpulse'
--   Found libpulse, version 17.0
-- Checking for module 'libavcodec'
--   Found libavcodec, version 61.19.100
-- Checking for module 'libavformat'
--   Found libavformat, version 61.7.100
-- Checking for module 'libavutil'
--   Found libavutil, version 59.39.100
-- Performing Test HAVE_STDATOMIC
-- Performing Test HAVE_STDATOMIC - Success
-- Found WrapAtomic: TRUE
-- Found SQLite3: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/include (found version "3.47.2")
-- Performing Test ASSERT_FAIL_HAS_INT
-- Performing Test ASSERT_FAIL_HAS_INT - Failed
-- Found OpenGL: /usr/lib64/libOpenGL.so
-- Found WrapOpenGL: TRUE
-- Found XKB: /usr/lib64/libxkbcommon.so (found suitable version "1.7.0", minimum required is "0.5.0")
-- Found WrapVulkanHeaders: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/include
-- Found OpenSSL: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libcrypto.so (found suitable version "3.4.0", minimum required is "3")
-- Found ZLIB: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libz.so (found suitable version "1.3.1", minimum required is "1")
-- Configuring done (465.7s)
-- Generating done (0.9s)
-- Build files have been written to: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release
ninja: Entering directory `/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release'
[0/2] Re-checking globbed directories...
[2930/2931] Linking CXX executable bin/Ladybird
/home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/bin/Ladybird: symbol lookup error: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/lib64/liblagom-unicode.so.0: undefined symbol: _ZTVN6icu_7613UnicodeStringE
ladybird (master)$ ldd /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/lib64/liblagom-unicode.so.0
        linux-vdso.so.1 (0x00007fe9b1b24000)
        liblagom-ak.so.0 => /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/lib64/liblagom-ak.so.0 (0x00007fe9b1a5a000)
        libicui18n.so.76 => /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libicui18n.so.76 (0x00007fe9b1400000)
        libicuuc.so.76 => /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libicuuc.so.76 (0x00007fe9b1000000)
        libicudata.so.76 => /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libicudata.so.76 (0x00007fe9af000000)
        libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/14/libstdc++.so.6 (0x00007fe9aec00000)
        libm.so.6 => /usr/lib64/libm.so.6 (0x00007fe9b1943000)
        libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/14/libgcc_s.so.1 (0x00007fe9b1915000)
        libc.so.6 => /usr/lib64/libc.so.6 (0x00007fe9aea14000)
        libsimdutf.so.11 => /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libsimdutf.so.11 (0x00007fe9b188e000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fe9b1b26000)
ladybird (master)$ $ ldd ./Build/release/bin/Ladybird | grep icu
        libicui18n.so.76 => /usr/lib64/libicui18n.so.76 (0x00007f667c000000)
        libicuuc.so.76 => /usr/lib64/libicuuc.so.76 (0x00007f667bc00000)
        libicudata.so.76 => /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/vcpkg_installed/x64-linux-dynamic/lib/libicudata.so.76 (0x00007f6678800000)

Expected behavior

The browser is running.

Actual behavior

./Build/release/bin/Ladybird: symbol lookup error: /home/user/src/github.com/LadybirdBrowser/ladybird/Build/release/lib64/liblagom-unicode.so.0: undefined symbol: _ZTVN6icu_7613UnicodeStringE

URL for a reduced test case

n/a

HTML/SVG/etc. source for a reduced test case

n/a

Log output and (if possible) backtrace

n/a

Screenshots or screen recordings

No response

Build flags or config settings

All settings are default.

Contribute a patch?

  • I’ll contribute a patch for this myself.
@ADKaster
Copy link
Member

ADKaster commented Mar 6, 2025

Quick question on this: does adding qt to vcpkg.json solve the issue? It will also result in building qt6 from source to do this, however.

@dmage
Copy link
Author

dmage commented Mar 8, 2025

Unfortunately the answer won't be as quick.

So far my change is:

$ git diff
diff --git a/vcpkg.json b/vcpkg.json
index 2102a2c493..3d4aadc750 100644
--- a/vcpkg.json
+++ b/vcpkg.json
@@ -122,7 +122,8 @@
       "name": "vulkan-headers",
       "platform": "!android"
     },
-    "woff2"
+    "woff2",
+    "qt"
   ],
   "overrides": [
     {

Now the build fails due to weird issues with chromium

In file included from ../../../../../src/here-src-6-fc421f1193.clean/src/3rdparty/chromium/media/base/libvpx_thread_wrapper.cc:8:
../../../../../src/here-src-6-fc421f1193.clean/src/3rdparty/chromium/third_party/libvpx/source/libvpx/vpx_util/vpx_thread.h:18:10: fatal error: ./vpx_config.h: No such file or directory
   18 | #include "./vpx_config.h"
      |          ^~~~~~~~~~~~~~~~
compilation terminated.

I need to learn more about vcpkg to understand what's going on here.

@ADKaster
Copy link
Member

ADKaster commented Mar 8, 2025

..huh? what dependency of ours is pulling in libvpx via a 3rdparty/chromium path?

@dmage
Copy link
Author

dmage commented Mar 8, 2025

Oh, you saved a lot of my time, thanks. I naively added "qt" that pulled qtwebengine. This patch fixed my issues, I can compile and run ladybird:

diff --git a/vcpkg.json b/vcpkg.json
index 2102a2c493..7c38d63ba6 100644
--- a/vcpkg.json
+++ b/vcpkg.json
@@ -122,7 +122,20 @@
       "name": "vulkan-headers",
       "platform": "!android"
     },
-    "woff2"
+    "woff2",
+    "qtbase",
+    "qtdeclarative",
+    "qtlanguageserver",
+    "qtlocation",
+    "qtpositioning",
+    "qtquick3d",
+    "qtquicktimeline",
+    "qtserialport",
+    "qtshadertools",
+    "qtsvg",
+    "qttools",
+    "qtwayland",
+    "qtwebchannel"
   ],
   "overrides": [
     {

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

No branches or pull requests

2 participants