Как разрешить этот конфликт связи с vcruntime140.dll, поставляемым с JVM?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как разрешить этот конфликт связи с vcruntime140.dll, поставляемым с JVM?

Сообщение Anonymous »

Моя организация публикует довольно обширную библиотеку на основе C++17 и связанные с ней приложения, а также мы публикуем привязки Java и C# с помощью Swig. Наша библиотека и привязки поддерживают множество разновидностей и версий macOS, Linux и Windows. Мы успешно делали это в течение многих лет без проблем, но столкнулись с небольшой проблемой, связанной с файлом vcruntime140.dll, который поставляется с JVM.
My tl; Согласно рекомендациям Microsoft, вам не следует поставлять среду выполнения VC, а следует отправить или предоставить ссылку на установщик среды выполнения VC, позволяющий пользователю установить (или уже иметь) времени выполнения в своей системе и получать соответствующие обновления безопасности и исправления ошибок для нее от Microsoft. Похоже, что JVM нарушает эти рекомендации, отправляя файл vcruntime140.dll напрямую (а не только Oracle JVM... похоже, что OpenJDK, Temurin и другие сделали/сделали это). И до сих пор это ничего для нас не сломало.
Но теперь выяснилось, что Microsoft ввела одну или несколько двоичных несовместимостей со средой выполнения VC между версиями 14.31 (поставляемыми с JVM). и 14.40 (среда выполнения, установленная на наших сборщиках от Microsoft, с которой связываются все наши библиотеки, привязки и приложения во время сборки). Когда opt-версия нашей библиотеки привязок загружается с помощью Java System.loadLibrary(libName), мы получаем ошибки совместимости, которые препятствуют загрузке. У нас нет такой же ошибки при загрузке отладочной версии наших привязок, что имеет смысл, поскольку JVM не поставляется с отладочной версией среды выполнения VC. Мы также не получим ошибок, если (временно) заменим vcruntime140.dll в каталоге bin JVM копией текущего файла из системных каталогов, но мы не можем попросить наших пользователей сделать это. , и неизвестно, какие потенциальные ошибки могут возникнуть в самой JVM.
Мы попытались явно загрузить системную библиотеку времени выполнения VC версии 14.40 с помощью System.load(vcRuntimeDLLfile) перед загрузкой нашей библиотеки, и хотя это удается (исключений не возникает), оно игнорируется (или, скорее, предпочтительнее более старая версия, загруженная первой), поскольку мы все еще не можем загрузить opt-версию наших привязок. Похоже, что нет способа сообщить базовой системе, что нам нужна более новая версия для нашей библиотеки привязок.
В этой документации Oracle предполагается, что они рекомендуют выпустить vcruntime140. dll, которая нужна вашей библиотеке вместе с вашей библиотекой, что нарушает вышеупомянутые рекомендации Microsoft, и другие члены моей команды не решаются сделать это по ряду причин. Однако я начинаю думать, что другого выхода у нас нет. Я предполагаю, что нам нужно будет предоставить его под другим именем (например, vcruntime14.40.dll) в нашем файле Jar и связать его с этим другим именем, чтобы гарантировать, что DLL, предоставленная JVM, не будет выбрана вместо нашей. . Ужасно!
Одна мысль, которую я изучаю, - это всегда связывать наши привязки Windows opt с отладочной версией среды выполнения VC, чтобы обходить DLL, предоставляемую JVM. Я пока не уверен, сработает ли это вообще или будет слишком много недостатков/влияния на производительность.
Мы что-то упускаем из виду? Есть ли другой вариант решения этой проблемы? Права ли Microsoft, а разработчики JVM ошибаются? Правы ли разработчики JVM, а Microsoft ошибается? По крайней мере, я понимаю, почему разработчики JVM захотели включить эту DLL, учитывая, что Microsoft нарушает двоичную совместимость — одно обновление Windows может сделать установку Java совершенно бесполезной, если она зависит от среды выполнения системы!

Подробнее здесь: https://stackoverflow.com/questions/789 ... ed-with-th
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как разрешить этот конфликт связи с vcruntime140.dll, поставляемым с JVM?
    Anonymous » » в форуме JAVA
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Как разрешить этот конфликт связи с vcruntime140.dll, поставляемым с JVM?
    Anonymous » » в форуме JAVA
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Как разрешить этот конфликт связи с vcruntime140.dll, поставляемым с JVM?
    Anonymous » » в форуме C++
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Vcruntime140.dll 14.0 несовместим со сборкой PHP
    Anonymous » » в форуме Php
    0 Ответы
    53 Просмотры
    Последнее сообщение Anonymous
  • Проблема с разъемом MySQL C ++ (v9.2): нарушение доступа в vcruntime140.dll [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»