Автор Тема: Статический блок TLS для загрузки библиотеки в .NET проекте  (Прочитано 2488 раз)

Оффлайн Akexander D

  • Начинающий
  • *
  • Сообщений: 9
Можно ли изменить размер статического блока TLS в проекте .NET?
Проблема с загрузкой libcef.so (NativeLibrary.Load и dlopen) большого размера (1.4 Gb) на стороне проекта CSharp.
У меня есть исключение типа «Невозможно выделить память в статическом блоке TLS». Я пытался использовать LD_PRELOAD,
но безрезультатно. Изменение переменной glibc.rtld.optional_static_tls
и добавление параметров компиляции -ftls-model=global-dynamic, -fPIC в CMake также не имеет никакого эффекта.
В Windows 10 x64 проект работает нормально (но там libcef.dll и весит в разы меньше).  :-o
Если я пытаюсь загрузить libcef.so из проекта C++ в Linux, это тоже работает. :-o
Если есть какие то варианты буду рад их испробовать. :-)

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 006
    • Домашняя страница
    • Email
Переписать на C++
Андрей Черепанов (cas@)

Оффлайн Akexander D

  • Начинающий
  • *
  • Сообщений: 9
Переписать на C++
проект слишком гигантский, чтоб его перетаскивать на плюсы.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 006
    • Домашняя страница
    • Email
Оставайтесь на тёплой ламповой Windows c такой языковой экзотикой.
Андрей Черепанов (cas@)

Оффлайн Akexander D

  • Начинающий
  • *
  • Сообщений: 9
Оставайтесь на тёплой ламповой Windows c такой языковой экзотикой.
Я задал вопрос совсем про другое, а не на наком языке мне переписать проект или на какой ОС оставаться. Если я пишу на форуме ALT LINUX, логично предположить что мне нужно решить этот вопрос именно на ней!

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 006
    • Домашняя страница
    • Email
На Альте крайне мало людей, котрые разбираются в разработке на C#. Потому никто, кроме меня, и не ответил.
Андрей Черепанов (cas@)

Оффлайн Akexander D

  • Начинающий
  • *
  • Сообщений: 9
На Альте крайне мало людей, котрые разбираются в разработке на C#. Потому никто, кроме меня, и не ответил.
Я на stackoverflow тоже написал, может чего подскажут.
Пока продумываю альтернативные пути решения данной задачи

Оффлайн ASte

  • Мастер
  • ***
  • Сообщений: 1 564
Проблема с загрузкой libcef.so (NativeLibrary.Load и dlopen) большого размера (1.4 Gb) на стороне проекта CSharp.
А оно точно такого большого размера должно быть?
Как-то в других проектах совсем не гигабайты..
$ ls -alh /opt/onlyoffice/desktopeditors/libcef.so
-rw-r--r-- 1 root root 198M фев 21 05:06 /opt/onlyoffice/desktopeditors/libcef.so
$ ls -alh /opt/zoom/cef/libcef.so
-rwxr-xr-x 1 root root 209M дек 22 07:24 /opt/zoom/cef/libcef.so

Оффлайн Akexander D

  • Начинающий
  • *
  • Сообщений: 9
Проблема с загрузкой libcef.so (NativeLibrary.Load и dlopen) большого размера (1.4 Gb) на стороне проекта CSharp.
А оно точно такого большого размера должно быть?
Как-то в других проектах совсем не гигабайты..
$ ls -alh /opt/onlyoffice/desktopeditors/libcef.so
-rw-r--r-- 1 root root 198M фев 21 05:06 /opt/onlyoffice/desktopeditors/libcef.so
$ ls -alh /opt/zoom/cef/libcef.so
-rwxr-xr-x 1 root root 209M дек 22 07:24 /opt/zoom/cef/libcef.so

к сожалению да
скриншот архива

но я полагаю что размер здесь не имеет первостепенного значения, тут нужно смотреть размер самого TLS,
readelf -Wl libcef.so | grep -E 'PhysAddr|TLS'
  TLS            0x103d9c00 0x00000000103dbc00 0x00000000103dbc00 0x00008c 0x0023f0 R   0x40
« Последнее редактирование: 16.06.2024 10:40:30 от Akexander D »

Оффлайн ASte

  • Мастер
  • ***
  • Сообщений: 1 564
Размер пакета с chromium ~120MB.
Ну он пожатый, ну пусть в несжатом виде будет ~200MB - что примерно согласуется с размерами библиотеки которая используется другими приложениями.
Что и зачем запихнули в "вашу" версию на почти полтора гига?
Оно выглядит каким-то подозрительно большим..

Оффлайн Akexander D

  • Начинающий
  • *
  • Сообщений: 9
Размер пакета с chromium ~120MB.
Ну он пожатый, ну пусть в несжатом виде будет ~200MB - что примерно согласуется с размерами библиотеки которая используется другими приложениями.
Что и зачем запихнули в "вашу" версию на почти полтора гига?
Оно выглядит каким-то подозрительно большим..
ну во-первых они не мои, во вторых ссылка на эти дистрибутивы есть на официальном репозитории CEF.
у других приложений оно меньше так как, возможно, сам libcef.so собирался локально, но у меня нет таких ресурсов и знаний чтоб его собрать с меньшим размером. я же пользую официальным общедоступным релизом.

Оффлайн ASte

  • Мастер
  • ***
  • Сообщений: 1 564
Подозреваю что как-то так:
$ ls -sh libcef.so
1,3G libcef.so
$ strip libcef.so
$ ls -sh libcef.so
207M libcef.so

Оффлайн Akexander D

  • Начинающий
  • *
  • Сообщений: 9
$ ls -sh libcef.so

Так это просто "обрезание внутреннего pdb", после такого я не смогу дебажить проект. Такая процедура хорошо зайдет на релизе. В любом случае, я попробую воспользоваться этой командой и попробовать подгрузить "порезанную" библиотеку.

P.S. за команду спасибо, не знал о такой.
« Последнее редактирование: 18.06.2024 09:54:00 от Akexander D »

Оффлайн ASte

  • Мастер
  • ***
  • Сообщений: 1 564
А Вам нужно дебажить именно ту внешнюю библиотеку?

Оффлайн Akexander D

  • Начинающий
  • *
  • Сообщений: 9
А Вам нужно дебажить именно ту внешнюю библиотеку?

да, вот сейчас например столкнулся с тем что все наглухо виснет при обращении к одной из функций этой библиотеки