У меня есть приложение Linux, написанное на C ++ с проприетарным исходным кодом, поэтому этот вопрос касается любых механизмов, которые могут вызвать то, что я описываю ниже.
Так или иначе, приложение использует некоторые библиотечные функции, которые выполняют некоторую обработку данных и выдают результат. На своей машине я получаю ожидаемый результат. В других случаях приложение либо выходит из строя, либо выводит бессмыслицу.
Оно распространяется как немного исходного кода и c библиотека, построенная на моем компьютере, которую затем можно собрать с make
и запустить (и, возможно, распространены). Среда ОС - Ubuntu 18.04.4 LTS (WSL1) и по существу одинакова на всех машинах.
Утилита ldd
указывает, что используются одни и те же библиотеки, а версии Ubuntu и g ++ идентичны также.
Приложение было запущено в gdb
на одной из машин, на которой произошел сбой, и оказалось, что указанный буфер c не был выделен и был nullptr
. В этом случае конструктору передается параметр размера #define
.
Я знаю, что предпочтительный подход к Linux - это распространение исходного кода, а не предварительно скомпилированных двоичных файлов, а в целях защиты IP. , это не всегда возможно. Я также читал, что могут быть тонкие версии библиотеки или несовместимости на уровне ядра, которые могут вызвать такого рода странности, но, как я уже сказал, здесь, похоже, не так.
Q: Кто-нибудь знаете, почему я могу наблюдать это странное поведение?