Импорт внешней библиотеки в Veins

Утро,

Я хотел бы импортировать свою собственную библиотеку в проект Veins (v4.4).

Я следовал этому руководству, чтобы скомпилировать разделяемую библиотеку. Я также удалил общую библиотеку с помощью этой команды:

strip --strip-unneeded libfoo.so

так как я заметил, что системные библиотеки, такие как sqlite3, компилируются в разделенном режиме.

Затем я импортировал библиотеку из

1.Проект->Свойства->Пути и символы:

1.1 включает

1.2 Библиотеки

1.3 Пути к библиотекам

2.Makemake->Src->Options->Link->Дополнительные библиотеки

Однако проблема в том, что когда я использую импортированную библиотеку, я все еще получаю сообщение об ошибке «неопределенный символ»; поэтому я полагаю, что библиотека неправильно импортирована или прочитана симулятором.

Любое предложение?

Спасибо за помощь


person moi    schedule 23.01.2017    source источник
comment
Вы получаете сообщение об ошибке при компиляции, компоновке или запуске?   -  person Christoph Sommer    schedule 23.01.2017
comment
во время работы: ‹!› Предупреждение: opp_run: Невозможно проверить библиотеку ../../src/veins: ../../src//libveins.so: неопределенный символ: _Z3foov ‹!› Ошибка при запуске: Невозможно загрузить библиотеку '../../src//libveins.so': ../../src//libveins.so: неопределенный символ: _Z3foov.   -  person moi    schedule 23.01.2017
comment
Какие параметры командной строки вы используете для запуска моделирования?   -  person Christoph Sommer    schedule 24.01.2017
comment
@ChristophSommer Я запускаю его из IDE, а не из командной строки. Если я запускаю его в режиме отладки, я получаю это $1 = 0xff. Целевой порядок байтов устанавливается автоматически (в настоящее время прямой порядок байтов) [отладка потока с использованием libthread_db включена] с использованием библиотеки хоста libthread_db /lib/x86_64-linux-gnu/libthread_db.so.1. [Низший 1 (процесс 4837) завершился с кодом 01] Выйти   -  person moi    schedule 24.01.2017


Ответы (1)


Как загрузить дополнительные библиотеки в вашу симуляцию, описано в глава руководства пользователя по запуску симуляций.

Короче говоря, вам нужно будет добавить -l foo к параметрам командной строки, чтобы симуляция загружалась libfoo.so при ее запуске.

Если вы используете IDE для запуска имитации, вы можете отредактировать конфигурацию запуска вашей имитации: выберите пункт меню Run > Run Configurations..., затем на вкладке Main щелкните More >>, добавьте имя вашей библиотеки (например, foo, если ваша библиотека называется libfoo.so, или foo bar если вы хотите, чтобы ваша симуляция загружала libfoo.so и libbar.so при запуске) в текстовое поле Dynamic libraries. После запуска вы увидите, что вышеупомянутый параметр командной строки -l foo используется IDE для запуска моделирования.

Если вы не знаете, куда поместить свою библиотеку, обсудите соответствующий вопрос: ‹!› Ошибка при запуске: не удается загрузить библиотеку в проекте OMNET++ при использовании sqlite3

person Christoph Sommer    schedule 24.01.2017
comment
Как добавить библиотеку к венам в поле Динамические библиотеки? Потому что я уже сделал все остальные шаги правильно; это может быть единственным, из-за которого моя симуляция не работает должным образом. Нужна ли точка с запятой, запятая, копирование lib в проект veins и т.д.? Я действительно пробовал много вещей, но это не работает, хотя я могу без проблем использовать библиотеку sqlite3. - person moi; 25.01.2017
comment
Динамические библиотеки: ${opp_shared_libs:/veins/examples/veins} foo, но по-прежнему возникает ошибка неопределенного символа. Я также пробовал с foo внутри скобок, но это не сработало. - person moi; 25.01.2017