Автор |
Сообщение |
Сообщение создано: 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
Сообщения: 3750
|
"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
Сообщения: 3750
|
"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" не передается:
/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
Сообщения: 3750
|
"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
Сообщения: 3750
|
"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 - все работает. Спасибо.
|