Использование внешних библиотек в REDHAWK

Я создал проект Eclipse CDT, в котором используются автоинструменты из библиотеки исходного кода libsndfile. Он отлично строится в Eclipse. Как изменить этот проект, чтобы использовать его в качестве компонента REDHAWK так же, как используется библиотека dsp и другие?

Спасибо!


person wakeboard82    schedule 09.08.2013    source источник


Ответы (2)


Существует несколько подходов к добавлению общей библиотеки для работы с REDHAWK. Самый простой подход — установить библиотеку на GPP и выполнить шаги, описанные в разделе «Включение внешних библиотек» в документе REDHAWK документация.

Подход, использованный в dsplib, о котором вы спрашивали, немного отличается. Это создает зависимость библиотеки программных пакетов REDHAWK, которая устанавливается в SDRROOT и развертывается во время выполнения вместе с вашим компонентом. Вот шаги, чтобы заставить существующий проект C++ работать в REDHAWK. Этот ответ не распространяется на сборку библиотеки или процесс ее импорта в eclipse, поскольку по этим темам есть множество сообщений:

  1. Импортируйте библиотеку в свою IDE.

  2. Создайте свою общую библиотеку, чтобы у вас был общий объект (файл .so)

  3. Добавьте файл .spd.xml в свою библиотеку, например найденный здесь.

  4. Отредактируйте этот файл .spd.xml:

4а. Обновите тег localfile, чтобы он указывал на расположение вашего конкретного файла .so.

4б. Убедитесь, что значение тега идентификатора реализации является уникальным номером версии для вашей библиотеки.

  1. Добавьте файл .project, если он не существует, например найденный здесь. Откройте файл .project и убедитесь, что включены следующие типы:

    <nature>gov.redhawk.ide.natures.sca.project</nature>
    <nature>gov.redhawk.ide.natures.sca.component</nature>
    
  2. Теперь у вас должна быть возможность перетащить библиотеку softpackage в корень SDR.

Вот шаги по обновлению ваших отдельных компонентов, которые вы создаете, чтобы использовать вашу новую библиотеку:

  1. Отредактируйте компоненты Makefile.am в папке реализации cpp. Отредактируйте _CXXFLAGS, чтобы добавить путь к файлам заголовков, _LDADD, чтобы добавить свою библиотеку, и _LDFLAGS, чтобы включить путь к вашей библиотеке. См. этот пример, чтобы узнать, как компонент agc изменяет эти переменные для включения библиотеки dsp.

  2. Отредактируйте файл .spd.xml, включив в него зависимость программного пакета. В разделе реализации добавьте зависимость времени выполнения от вашей библиотеки, например найденную здесь. В частности, ваш раздел зависимостей должен быть следующим:

    <dependency type="runtime_requirements">
      <softpkgref>
        <localfile name="XXXX"/>
        <implref refid="YYYY"/>
      </softpkgref>
    </dependency>
    

XXXX — это путь к файлу .spd.xml вашей установленной библиотеки в SDRROOT относительно каталога dom (он должен начинаться с /components). YYYY — это конкретное значение реализации, определенное в 4b выше.

person Youssef Bagoulla    schedule 15.08.2013
comment
Спасибо! В конце концов я понял большую часть этого. Однако оказывается, что некоторые пакеты с исходным кодом не создают файл .so до тех пор, пока вы не запустите команду make install. Итак, мне пришлось изменить параметр --prefix в Eclipse, чтобы установить .so в каталог Release и добавить файл build.sh в проект Eclipse (изменив команду сборки). Это, казалось, сработало. - person wakeboard82; 16.08.2013

Я не могу добавлять комментарии, поэтому прошу прощения за «ответ».

Для меня описание Юссефа отлично подошло для создания компонентов с разделяемыми библиотеками. Однако, чтобы загружать разделяемые библиотеки во время выполнения, мне нужно было добавить в файл makefile.am _LDFLAGS следующее:

-Xlinker -rpath -Xlinker ../../dsp/Release

Где «/dsp/Release» — это относительный путь к любой созданной вами общей библиотеке.

person neil    schedule 17.06.2014