ubuntu 18.04 LTS как WSL, Visual Studio 16.6.0, cmake 3.10. Вопрос заключается в загрузке библиотек во время / до времени выполнения, а не во время компиляции (по крайней мере, я так думаю):
Я работаю над приложением, которое записывает график поверхности в изображение jpeg
и сравнивает изображение на ссылку. средство записи jpeg полагается на libjpeg.so
, тогда как часть сравнения полагается на libmwjpegreader.so
.
строит и компилирует нормально, но приводит к Segmentation fault (core dumped)
при выполнении, во время записи первого файла jpeg: очевидно, как libjpeg
, так и libmwjpegreader
реализуют аналогичные функции, и по какой-то причине модуль записи jpeg использует функции libmwjpegreader
вместо libjpeg
.
обходной путь - добавить запуск исполняемого файла перед запуском с LD_PRELOAD=libjpeg
, что приводит к правильному поведению. Это проверяется с помощью LD_DEBUG=files ./executable |& grep 'calling init'
- порядок загрузки библиотек изменяется, и приложение запускается, как задумано.
любая возможность изменить порядок загрузки библиотек для выполнения , не полагаясь на LD_PRELOAD
? Имеет ли это какое-либо отношение к порядку связывания во время компиляции? Я использую CMAKE
в качестве среды сборки, но включение libjpeg
или смещение позиций в cmakelists.txt
не повлияло.