УкраїнськаEnglishРocсийский
Вход/Новый
В теме нет новых постов

Сборка внешнего модуля к OpenSCADA


Автор Сообщение
Сообщение создано: 09. 02. 2016 [11:24]
platonov
Олег Платонов
Создатель темы
Зарегистрирован(а) с: 04.02.2016
Сообщения: 6
Добрый день.

При сборке внешнего модуля команда make возвращает следующую ошибку:
libtool: link: cannot find the library `./src/liboscada.la' or unhandled argument `./src/liboscada.la'

Пользовался этой инструкцией: http://wiki.oscada.org/Doc/ModuleBuild
Судя по всему, проблема в файле Makefile.am.
Версия Makefile.am, которую я скопировал из шаблона /moduls/daq/=Tmpl=/ из svn репозитория (рабочая версия 2327), отличается от Makefile.am, представленного в инструкции (видимо, такой Makefile использовался в версии OpenSCADA 0.8).

Когда я попробовал использовать Makefile из инструкции (в котором вообще не указывается liboscada.la) сборка и установка проходят успешно, но при попытке подключить модуль к OpenSCADA возникает ошибка:
/usr/lib/openscada/daq_NewMod.so: undefined symbol: _ZN6OSCADA8TTypeDAQ7objNameB5cxx11Ev

Подскажите, что нужно изменить, чтобы сборка прошла успешно?


[Сообщение редактировалось 1 раз(а), в последний раз 09.02.2016 в 13:13.]
Сообщение создано: 09. 02. 2016 [15:06]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3679
"platonov" wrote:

Подскажите, что нужно изменить, чтобы сборка прошла успешно?

Актуализировал инструкцию, перечитайте!

Learn, learn and learn better than work, work and work.
Сообщение создано: 09. 02. 2016 [15:25]
platonov
Олег Платонов
Создатель темы
Зарегистрирован(а) с: 04.02.2016
Сообщения: 6
"roman" wrote:

Актуализировал инструкцию, перечитайте!


Перечитал, поправил Makefile.am, сборка прошла без ошибок, спасибо.

Но остался вопрос - как добавить этот модуль к установленной (в моем случае - из deb пакетов) OpenSCADA?
Команда
su;make install
создает в директории /usr/lib/openscada/ файлы daq_NewMod.so и daq_NewMod.la, но при попытке включить модуль в системном конфигураторе выходит та же ошибка:
/usr/lib/openscada/daq_NewMod.so: undefined symbol: _ZN6OSCADA8TTypeDAQ7objNameB5cxx11Ev
Сообщение создано: 09. 02. 2016 [15:50]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3679
"platonov" wrote:

Но остался вопрос - как добавить этот модуль к установленной (в моем случае - из deb пакетов) OpenSCADA?

Создавайте Deb-пакет.

"platonov" wrote:

/usr/lib/openscada/daq_NewMod.so: undefined symbol: _ZN6OSCADA8TTypeDAQ7objNameB5cxx11Ev

Плохо читали! С текущей-правильной конфигурацией такого рода ошибок динамической линковки, если речь о 0.9 Work, быть не может в принципе, да и у меня нет. Т.е. остался где-то "-no-undefined".

Learn, learn and learn better than work, work and work.
Сообщение создано: 10. 02. 2016 [08:59]
platonov
Олег Платонов
Создатель темы
Зарегистрирован(а) с: 04.02.2016
Сообщения: 6
"roman" wrote:

Плохо читали! С текущей-правильной конфигурацией такого рода ошибок динамической линковки, если речь о 0.9 Work, быть не может в принципе, да и у меня нет. Т.е. остался где-то "-no-undefined".


Переделал все еще раз - не помогло. Установил ОС по новой, сделал все в точности по инструкции - та же ошибка.
При этом когда я собираю OpenSCADA целиком (включая этот новый модуль), то все работает.

"-no-undefined" мог остаться из-за старой инструкции, но сейчас его точно нигде нет - ведь я беру Makefile.am из папки шаблона =Tmpl= и только убираю из него лишнее в соответствии с актуальной инструкцией.

При этом если посмотреть на вывод команды make, то видно, что ключ "-no-undefined" не передается:

JAVASCRIPT
/bin/bash ./libtool  --tag=CXX --tag=disable-static  --mode=link g++  -g -O2 -I/usr/include/openscada  -module -avoid-version 
-loscada  -o daq_NewMod.la -rpath /usr/lib/openscada daq_NewMod_la-module.lo  
libtool: link: g++  -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o 
/usr/lib/gcc/x86_64-linux-gnu/5/crtbeginS.o  .libs/daq_NewMod_la-module.o   /usr/lib/liboscada.so 
-L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu 
-L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu 
-L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. -lstdc++ -lm -lc -lgcc_s 
/usr/lib/gcc/x86_64-linux-gnu/5/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o  
-O2   -Wl,-soname -Wl,daq_NewMod.so -o .libs/daq_NewMod.so
libtool: link: ( cd ".libs" && rm -f "daq_NewMod.la" && ln -s "../daq_NewMod.la" "daq_NewMod.la" )


Команда ldd /usr/lib/openscada/daq_NewMod.so выдает точно такой же набор библиотек, что и для daq_ModBus.so.

Не найденный тип хранится в библиотеке /usr/lib/liboscada.so.3, на которую линк есть:

liboscada.so.3 => /usr/lib/liboscada.so.3 (0x00007fc9be783000)

Команда nm -D /usr/lib/liboscada.so.3 | grep _ZN6OSCADA8TTypeDAQ7objName выдает:

0000000000159310 T _ZN6OSCADA8TTypeDAQ7objNameEv

Странно, почему в ошибке тип указан как _ZN6OSCADA8TTypeDAQ7objNameB5cxx11Ev? Откуда берется эта вставка - B5cxx11?
И еще неясно, почему при make install в папку /usr/lib/openscada/ копируется не только daq_NewMod.so, но и файл daq_NewMod.la?

[Сообщение редактировалось 3 раз(а), в последний раз 10.02.2016 в 09:39.]
Сообщение создано: 10. 02. 2016 [10:15]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3679
"platonov" wrote:

Странно, почему в ошибке тип указан как _ZN6OSCADA8TTypeDAQ7objNameB5cxx11Ev? Откуда берется эта вставка - B5cxx11?

CXX11 где-то похоже включился криво, но где я не знаю. GCC и OS скажите какие?

"platonov" wrote:

И еще неясно, почему при make install в папку /usr/lib/openscada/ копируется не только daq_NewMod.so, но и файл daq_NewMod.la?

Это стандартное поведение libtool, оно никому не мешает и если лишнее то просто при упаковке в пакет не пакуется.

Learn, learn and learn better than work, work and work.
Сообщение создано: 10. 02. 2016 [10:27]
platonov
Олег Платонов
Создатель темы
Зарегистрирован(а) с: 04.02.2016
Сообщения: 6
"roman" wrote:

CXX11 где-то похоже включился криво, но где я не знаю. GCC и OS скажите какие?

gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010

OS - Lubuntu 15.10, тестировал на версиях i386 и amd64.
Distributor ID: Ubuntu
Description: Ubuntu 15.10
Release: 15.10
Codename: wily
Linux tuks-HP 4.2.0-25-generic #30-Ubuntu SMP Mon Jan 18 12:31:50 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

Сообщение создано: 10. 02. 2016 [10:55]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3679
"platonov" wrote:

"roman" wrote:

CXX11 где-то похоже включился криво, но где я не знаю. GCC и OS скажите какие?

gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010

Значит это проблема Унстейбла от Ubuntu, во всяком случае на Debian 7 и 8, с GCC 4.9, таких проблем нет.

Learn, learn and learn better than work, work and work.
Сообщение создано: 10. 02. 2016 [14:19]
platonov
Олег Платонов
Создатель темы
Зарегистрирован(а) с: 04.02.2016
Сообщения: 6
"roman" wrote:

Значит это проблема Унстейбла от Ubuntu, во всяком случае на Debian 7 и 8, с GCC 4.9, таких проблем нет.


Установил более ранний релиз Lubuntu 14.04 с gcc-4.8.4 - все работает. Спасибо.



11258