Problem compiling OLA
Rui Barreiros
rbarreiros at gmail.com
Fri May 6 12:41:21 CEST 2016
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/pkgconfig"
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/intermediate/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/pkgcon
>> 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_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
>> $(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/20160506/7c0233a9/attachment.bin
More information about the Nard
mailing list