2013-07-14 3 views
1

Я пишу общую библиотеку, на которой я написал исполняемый файл для единичного тестирования. Я хотел бы создать цель в Makefile, которая инициирует процедуру тестирования.Единичная проверка разделяемой библиотеки с помощью Makefile

Исполняемый модуль unit-testing связан с библиотекой, созданной мгновением назад.

При запуске исполняемого файла в пределах Makefile, я получаю

./starttest: error while loading shared libraries: libllist.so: cannot open shared object file: No such file or directory 

Какой путь лучше подойти к этому вопросу?

  1. определения LD_LIBRARY_PATH из в Makefile, как это?

    экспорт LD_LIBRARY_PATH = $ (Curdir)/Библиотека

  2. сила пользователю установить библиотеку перед запуском тестов?

  3. Не запускайте модульное тестирование из Makefile, пользователь сделает это сам.

или, может быть, я что-то пропустил, и есть даже лучший способ?

ответ

3

Я бы использовал параметр №1, если все, что вы хотите, это для модульных тестов, которые будут вызваны через make-файл. Определенно вариант №2 не должен использоваться, и мне тоже не нравится вариант №3.

Четвертый вариант заключается в создании вашей тестовой программы с использованием опции компоновщика -rpath для кодирования местоположения разделяемой библиотеки в программе тестирования модулей. Например, если вы используете GCC, это будет: -Wl,-rpath=$(CURDIR). Это позволяет вызывать модульный тест из командной строки, не требуя установки LD_LIBRARY_PATH и т. Д.

Это не очень хорошая идея для окончательных двоичных файлов (чтобы закодировать их каталог сборки в них), но это нормально для двоичных двоичных тестов, которые вы не будете использовать вне своего каталога компоновки.

+0

На самом деле я решил это 10 минут назад (техника -rpath), но я решил оставить вопрос, чтобы увидеть больше вариантов. – stdcall

+0

Существует очень много способов, которыми программа может использовать для поиска разделяемой библиотеки. Единственный доступный вариант, который еще не рассмотрен выше, - это изменить список каталогов по умолчанию для системы, на который нужно посмотреть. Для этого требуется, чтобы привилегии администратора обновлялись для каждой рабочей области, поэтому это явно не стартер. – MadScientist

Смежные вопросы