Linux консольное приложение, созданное с использованием бинарной библиотеки, работает на моем компьютере, но не работает на других с той же версией Linux - PullRequest
3 голосов
/ 18 июня 2020

У меня есть приложение Linux, написанное на C ++ с проприетарным исходным кодом, поэтому этот вопрос касается любых механизмов, которые могут вызвать то, что я описываю ниже.

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

Оно распространяется как немного исходного кода и c библиотека, построенная на моем компьютере, которую затем можно собрать с make и запустить (и, возможно, распространены). Среда ОС - Ubuntu 18.04.4 LTS (WSL1) и по существу одинакова на всех машинах.

Утилита ldd указывает, что используются одни и те же библиотеки, а версии Ubuntu и g ++ идентичны также.

Приложение было запущено в gdb на одной из машин, на которой произошел сбой, и оказалось, что указанный буфер c не был выделен и был nullptr. В этом случае конструктору передается параметр размера #define.

Я знаю, что предпочтительный подход к Linux - это распространение исходного кода, а не предварительно скомпилированных двоичных файлов, а в целях защиты IP. , это не всегда возможно. Я также читал, что могут быть тонкие версии библиотеки или несовместимости на уровне ядра, которые могут вызвать такого рода странности, но, как я уже сказал, здесь, похоже, не так.

Q: Кто-нибудь знаете, почему я могу наблюдать это странное поведение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...