C ++: влияние на порядок загрузки библиотеки во время выполнения - PullRequest
1 голос
/ 06 мая 2020

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 не повлияло.

...