Problem compiling OLA
Rui Barreiros
rbarreiros at gmail.com
Mon May 16 13:49:52 CEST 2016
Hi Ronny,
Spoke too soon, olad in the target host still tries to load libraries
not in the regular paths, but non-existant ones and takes a long time to
search for the next, like this:
#strace olad
execve("/usr/bin/olad", ["olad"], [/* 15 vars */]) = 0
brk(0) = 0x15000
uname({sys="Linux", node="tridmx_raspi_b_rev2-952bbb2c", ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0) = 0xa6ffc000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or
directory)
open("/home/myuser/Projects/RaspberryPi/nard/nard-git/apps/protobuf/protobuf-2.6.1/staging/usr/lib/tls/v6l/vfp/libolaserver.so.0",
O_RDONLY|O_CLOEXEC
Is it working in your end ? Is this a build host problem ? I'll probably
update Ubuntu to the latest 16 today, will recompile everything after
the upgrade.
ii libltdl-dev:amd64 2.4.2-1.11
amd64 System independent dlopen wrapper for GNU libtool
ii libltdl7:amd64 2.4.2-1.11
amd64 System independent dlopen wrapper for GNU libtool
ii libltdl7:i386 2.4.2-1.11
i386 System independent dlopen wrapper for GNU libtool
ii libtool 2.4.2-1.11 all
Generic library support script
ii libtool-bin 2.4.2-1.11
amd64 Generic library support script (libtool binary)
ii autoconf 2.69-8 all automatic
configure script builder
ii automake 1:1.15-1ubuntu1 all
Tool for generating GNU Standards-compliant Makefiles
ii autotools-dev 20140911.1
all Update infrastructure for config.{guess,sub} files
On 13-05-2016 10:53, Ronny Nilsson wrote:
> Hi Rui
> I gave OLA a spin and you are quite right. OLA cross compiling is effectively
> broken! Several patches was necessary to make it build... I've included it
> in my git devel branch now; would you like to check that it actually works?
> OLA starts fine, but I have no DMX HW for testing. Most of the plugins and
> examples should be available too.
>
> I have only tried Debian 8 as build PC so far. It works if you install these
> packages: libprotoc-dev and protobuf-compiler. Then you don't need to build
> everything twice. :)
>
> Add these lines to your product recipe:
> PKGS_APPS += protobuf/protobuf-2.6.1
> PKGS_APPS += uuid-lib/uuid-lib-1.0.3
> PKGS_APPS += usb-lib/usb-lib-1.0.20
> PKGS_APPS += microhttpd-lib/microhttpd-lib-0.9.49
> PKGS_APPS += openLightingArchitecture/openLightingArchitecture-0.10.1
>
> /Ronny
>
>
>
>
> ------------------------------------------
>> Hi Ronny,
>>
>> I managed to make it work, I have no idea if this is the right way of
>> doing it, or if it's just a hack to make it work. By using rlink and
>> rlink-path I managed to change the order at which the binary will search
>> for the libraries at startup, by using the following configure on ola:
>>
>> cd $(dir $@) && env PKG_CONFIG_DIR=""
>> PKG_CONFIG_LIBDIR="$(PATH_FS)/usr/lib/pkgconfig:$(PATH_FS)/usr/share/pkgcon
>> fig" PKG_CONFIG_SYSROOT_DIR="$(PATH_FS)" \
>> CFLAGS="$(CROSS_CFLAGS)" \
>> CPPFLAGS="$(CROSS_CFLAGS)" \
>> LDFLAGS="-Wl,-rpath -Wl,/lib -Wl,-rpath -Wl,/usr/lib
>> -Wl,-rpath-link -Wl,/lib -Wl,-rpath-link -Wl,/usr/lib -L/lib -L/usr/lib" \
>> PKG_CONFIG="/usr/bin/pkg-config" \
>> ./configure \
>> ac_cv_func_malloc_0_nonnull=yes
>> ac_cv_func_realloc_0_nonnull=yes \
>> libprotobuf_CFLAGS="-I$(PATH_FS)/usr/include
>> -L$(PATH_FS)/usr/lib -Wl,-rpath-link,$(PATH_FS)/usr/lib" \
>> libprotobuf_LIBS="-L$(PATH_FS)/usr/lib -lprotobuf
>> -lprotoc" \
>> base_uuid_CFLAGS="-I$(PATH_FS)/usr/include
>> -L$(PATH_FS)/usr/lib -Wl,-rpath-link,$(PATH_FS)/usr/lib" \
>> base_uuid_LIBS="-L$(PATH_FS)/usr/lib -luuid" \
>> --prefix=/usr \
>> --host=$(CROSS_TUPLE) \
>> --target=$(CROSS_TUPLE) \
>> --disable-dependency-tracking \
>> --without-dns-sd \
>> --with-protoc=$(PATH_APPS)/protobuf/native/src/protoc \
>> --with-ola-protoc-plugin=$(PATH_APPS)/ola/native/protoc/ola_protoc_plugin \
>> --disable-unittests \
>> --disable-examples \
>> --disable-rdm-tests \
>> --disable-doxygen-doc \
>> --disable-gcov \
>> --disable-tcmalloc \
>> --disable-root-check \
>> --disable-java-libs \
>> --disable-python-libs \
>> --disable-fatal-warnings \
>> --disable-all-plugins
>>
>> Notice LDFLAGS, I added /lib and then /usr/lib, this way all libs are
>> found and it's working properly on the target system.
>>
>> Besides this problem, there seems to be a bug in libtool when cross
>> compiling you might encounter on your tests, that the package libs won't
>> be found, for that, a hack is necessary, one needs to substitute all
>> instances of link_all_deplibs=(yes|no) to link_all_deplibs=unknown in
>> config/libtool.m4
>>
>> Here is the short version of the minimum requirements to be able to
>> cross compile OLA
>>
>> - build uuid (any works, I'm using util-linux)
>> - build protobuf
>> To build protobuf one needs to build 2 versions, one of them needs to
>> be native to the host system since binaries are compiled and used while
>> building itself, then, the second version is indeed the cross compiled
>> one while passing the --with-protoc=PATH_TO_NATIVE/src/protoc
>> I'm also using protobuf 2.5.0 since newer versions won't compile and
>> I haven't bothered much finding out why yet.
>> - build ola, 2 versions also, one native and the cross compiled one. The
>> native is needed because of a protobuf plugin used by the protoc binary,
>> needs to be compiled in the host machine. I do this with the following
>> configure:
>>
>> if [ ! -e native/protoc/ola_protoc_plugin ]; then \
>> cd native && env CFLAGS="" CPPFLAGS="" LDFLAGS=""
>> PKG_CONFIG="/usr/bin/pkg-config" \
>> ./configure \
>> --disable-all-plugins \
>> --disable-osc \
>> --disable-uart \
>> --disable-libusb \
>> --disable-libftdi \
>> --disable-http \
>> --disable-examples \
>> --disable-unittests \
>> --disable-doxygen-html \
>> --disable-doxygen-doc \
>> --without-dns-sd \
>> && $(MAKE) -j "$(CPUS)" protoc/ola_protoc_plugin; fi
>>
>> Just disable everything, and only build the ola_protoc_plugin. Then I
>> proceed to build the cross compile version of OLA with the earlier
>> configure.
>>
>> I'm tidying up all the build process, for everything (including OLA
>> plugins and such) to have a clean install of the whole system, and when
>> I do I'll build a patch against nard git and will send if you're
>> interested.
>>
>> For now, I'll move forward in the other tasks I have planned to do (some
>> command line tools to manage ola and the OS network with a few buttons
>> and an LCD to have a standalone system without the need of remote ssh
>> management or web and a few other utilities since I managed to have OLA
>> for now working, but I'll definitely investigate further about this
>> rlink/rlink-path hack or fix or whatever.
>>
>> If you do give it a whirl and want me to, I can package my current apps
>> Makefiles and attach them so you can have a starting point.
>>
>> Best regards.
>> Rui Barreiros
>>
>> On 05-05-2016 19:32, Ronny Nilsson wrote:
>>> Hi Rui
>>> This is looks like a tough one! I don't blame you for having problems...
>>> I'll try to find some time next week to help.
>>> /Ronny
>>>
>>>
>>>
>>> -----------------------------------------
>>>
>>>> Hi,
>>>>
>>>> I've been trying to compile OLA (https://www.openlighting.org) but been
>>>> having so many problems I'm melting my brains out !!
>>>>
>>>> To build OLA without any plugins, and all superfluous stuff disabled
>>>> (doc, examples, etc) requires protobuf and uuid, I managed successfully
>>>> to build and install this libraries (uuid is provided by util-linux), I
>>>> just make a plain DESTDIR=$(PATH_FS) make install for uuid and protobuf.
>>>>
>>>> OLA relies on either pkg-config or env variables to find protobuf and
>>>> uuid, I tried both and the problem I have happens on any.
>>>>
>>>> My problem is, OLA binaries have the lib path hardcoded and when I run
>>>> them on the raspberry pi, it just hangs forever, an strace reveals:
>>>>
>>>> root at tridmx_raspi_b_rev2-952bbb2c:~> strace olad
>>>> execve("/usr/bin/olad", ["olad"], [/* 15 vars */]) = 0
>>>> brk(0) = 0x15000
>>>> uname({sys="Linux", node="tridmx_raspi_b_rev2-952bbb2c", ...}) = 0
>>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
>>>> 0) = 0xa6ffc000
>>>> access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or
>>>> directory)
>>>> open("/home/rbarreiros/Projectos/RaspberryPi/nard/nard-git/intermediate/
>>>> fs/ usr/lib/tls/v6l/vfp/libolaserver.so.0", O_RDONLY|O_CLOEXEC) = -1
>>>> ELOOP (Too many levels of symbolic links)
>>>> stat64("/home/rbarreiros/Projectos/RaspberryPi/nard/nard-git/intermediat
>>>> e/f s/usr/lib/tls/v6l/vfp",
>>>>
>>>> Everytime an open/stat call is made, it takes a long long time, until it
>>>> receives the ELOOP error and attempts another path to try and open
>>>> libolaserver.so.0
>>>>
>>>>
>>>> Here is the configure/build section for ola Makefile
>>>>
>>>> To properly build ola for another system, one needs to build
>>>> ola_protoc_plugin natively first, as it's used by the protoc (which
>>>> needs to be built natively first also) to parse from protobuf message
>>>> files during build, then the cross compilation is done.
>>>>
>>>> # Need to build a native ola-protoc-plugin first
>>>> if [ ! -e native/protoc/ola_protoc_plugin ]; then \
>>>> cd native && env CFLAGS="" CPPFLAGS="" LDFLAGS=""
>>>> PKG_CONFIG="/usr/bin/pkg-config" \
>>>> ./configure \
>>>> --disable-all-plugins \
>>>> --disable-osc \
>>>> --disable-uart \
>>>> --disable-libusb \
>>>> --disable-libftdi \
>>>> --disable-http \
>>>> --disable-examples \
>>>> --disable-unittests \
>>>> --disable-doxygen-html \
>>>> --disable-doxygen-doc \
>>>> --without-dns-sd \
>>>> && $(MAKE) -j "$(CPUS)" protoc/ola_protoc_plugin; fi
>>>>
>>>> cd $(dir $@) && env PKG_CONFIG_DIR=""
>>>> PKG_CONFIG_LIBDIR="$(PATH_FS)/usr/lib/pkgconfig:$(PATH_FS)/usr/share/pkg
>>>> con fig" PKG_CONFIG_SYSROOT_DIR="$(PATH_FS)" \
>>>> CFLAGS="$(CROSS_CFLAGS)" \
>>>> CPPFLAGS="$(CROSS_CFLAGS)" \
>>>> LDFLAGS="-Wl,-rpath -Wl,/usr/lib -Wl,-rpath-link
>>>> -Wl,$(PATH_FS)/usr/lib -L$(PATH_FS)/lib -L$(PATH_FS)/usr/lib" \
>>>> PKG_CONFIG="/usr/bin/pkg-config" \
>>>> ./configure \
>>>> ac_cv_func_malloc_0_nonnull=yes
>>>> ac_cv_func_realloc_0_nonnull=yes \
>>>> libprotobuf_CFLAGS="-I$(PATH_FS)/usr/include
>>>> -L$(PATH_FS)/usr/lib -Wl,-rpath-link,$(PATH_FS)/usr/lib" \
>>>> libprotobuf_LIBS="-L$(PATH_FS)/usr/lib -lprotobuf
>>>> -lprotoc" \
>>>> base_uuid_CFLAGS="-I$(PATH_FS)/usr/include
>>>> -L$(PATH_FS)/usr/lib -Wl,-rpath-link,$(PATH_FS)/usr/lib" \
>>>> base_uuid_LIBS="-L$(PATH_FS)/usr/lib -luuid" \
>>>> --prefix=/usr \
>>>> --host=$(CROSS_TUPLE) \
>>>> --target=$(CROSS_TUPLE) \
>>>> --disable-dependency-tracking \
>>>> --without-dns-sd \
>>>> --with-protoc=$(PATH_APPS)/protobuf/native/src/protoc \
>>>> --with-ola-protoc-plugin=$(PATH_APPS)/ola/native/protoc/ola_protoc_plugi
>>>> n \ --disable-unittests \
>>>> --disable-examples \
>>>> --disable-rdm-tests \
>>>> --disable-doxygen-doc \
>>>> --disable-gcov \
>>>> --disable-tcmalloc \
>>>> --disable-root-check \
>>>> --disable-java-libs \
>>>> --disable-python-libs \
>>>> --disable-fatal-warnings \
>>>> --disable-all-plugins
>>>> $(MAKE) -C "$(PKG_VER)" -j $(CPUS)
>>>>
>>>> Worthy of note, I couldn't finish OLA compilation because I kept getting
>>>> an error where libtool couldn't find it's libraries (OLA libraries) and
>>>> suggested using rpath or rpath-link, I managed to fix this issue by
>>>> implementing a fix found here http://bugs.lttng.org/issues/321 in which
>>>> the configure script goes through all occurrences of link_all_deplibs in
>>>> config/libtool.m4 and replace all 'no|yes' to unknown.
>>>>
>>>> Does anyone have any idea what I'm doing wrong ? or where the bug is ?
>>>>
>>>> Best regards.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2109 bytes
Desc: S/MIME Cryptographic Signature
Url : http://www.arbetsmyra.dyndns.org/pipermail/nard/attachments/20160516/208afb11/attachment.bin
More information about the Nard
mailing list