Menu

bmx C++ compilation fails in Linux, but works in MacOSX

c kron
2016-08-17
2016-08-31
  • c kron

    c kron - 2016-08-17

    When I build BMX bmx-snapshot-20160705 on OSX it compiles and runs.

    But when I build the same C++ program in Linux (SUSE Linux Enterprise Server 11 SP3 (x86_64)) , it fails, see error log.

    fails:
    bmx-snapshot-20160705 (newest version)
    bmx-snapshot-20160330

    works:
    bmx-snapshot-20150603
    bmx-snapshot-20141125

    Error-log:
    ...
    ...
    configure: creating ./config.status
    config.status: creating Makefile
    config.status: creating libMXF++/Makefile
    config.status: creating libMXF++/metadata/Makefile
    config.status: creating libMXF++/metadata/base/Makefile
    config.status: creating libMXF++/extensions/Makefile
    config.status: creating examples/Makefile
    config.status: creating examples/Common/Makefile
    config.status: creating examples/D10MXFOP1AWriter/Makefile
    config.status: creating examples/OPAtomReader/Makefile
    config.status: creating test/Makefile
    config.status: creating tools/Makefile
    config.status: creating tools/gen_classes/Makefile
    config.status: creating msvc_build/Makefile
    config.status: creating msvc_build/vs10/Makefile
    config.status: creating libMXF++.pc
    config.status: creating config.h
    config.status: executing depfiles commands
    config.status: executing libtool commands
    + make install DESTDIR=/var/tmp/bmxlib-20160705-build
    sh ./gen_scm_version.sh mxfpp_scm_version.h ./mxfpp_scm_version.h LIBMXFPP_SCM_VERSION
    make install-recursive
    make[1]: Entering directory /home/vio-jboss/rpmbuild/BUILD/bmx-snapshot-20160705/libMXF++' Making install in libMXF++ make[2]: Entering directory/home/vio-jboss/rpmbuild/BUILD/bmx-snapshot-20160705/libMXF++/libMXF++'
    Making install in metadata
    make[3]: Entering directory /home/vio-jboss/rpmbuild/BUILD/bmx-snapshot-20160705/libMXF++/libMXF++/metadata' Making install in base make[4]: Entering directory/home/vio-jboss/rpmbuild/BUILD/bmx-snapshot-20160705/libMXF++/libMXF++/metadata/base'
    CXX libbase_la-AES3AudioDescriptorBase.lo
    CXX libbase_la-ANCDataDescriptorBase.lo
    CXX libbase_la-AudioChannelLabelSubDescriptorBase.lo
    AudioChannelLabelSubDescriptorBase.cpp:43: error: 'g_AudioChannelLabelSubDescriptor_set_key' was not declared in this scope
    AudioChannelLabelSubDescriptorBase.cpp: In member function 'bool mxfpp::AudioChannelLabelSubDescriptorBase::haveSoundfieldGroupLinkID() const':
    AudioChannelLabelSubDescriptorBase.cpp:62: error: 'g_AudioChannelLabelSubDescriptor_SoundfieldGroupLinkID_item_key' was not declared in this scope
    AudioChannelLabelSubDescriptorBase.cpp: In member function 'mxfUUID mxfpp::AudioChannelLabelSubDescriptorBase::getSoundfieldGroupLinkID() const':
    AudioChannelLabelSubDescriptorBase.cpp:67: error: 'g_AudioChannelLabelSubDescriptor_SoundfieldGroupLinkID_item_key' was not declared in this scope
    AudioChannelLabelSubDescriptorBase.cpp: In member function 'void mxfpp::AudioChannelLabelSubDescriptorBase::setSoundfieldGroupLinkID(mxfUUID)':
    AudioChannelLabelSubDescriptorBase.cpp:72: error: 'g_AudioChannelLabelSubDescriptor_SoundfieldGroupLinkID_item_key' was not declared in this scope
    make[4]: [libbase_la-AudioChannelLabelSubDescriptorBase.lo] Error 1
    make[4]: Leaving directory /home/vio-jboss/rpmbuild/BUILD/bmx-snapshot-20160705/libMXF++/libMXF++/metadata/base' make[3]: *** [install-recursive] Error 1 make[3]: Leaving directory/home/vio-jboss/rpmbuild/BUILD/bmx-snapshot-20160705/libMXF++/libMXF++/metadata'
    make[2]:
    [install-recursive] Error 1
    make[2]: Leaving directory /home/vio-jboss/rpmbuild/BUILD/bmx-snapshot-20160705/libMXF++/libMXF++' make[1]: *** [install-recursive] Error 1 make[1]: Leaving directory/home/vio-jboss/rpmbuild/BUILD/bmx-snapshot-20160705/libMXF++'
    make: *** [install] Error 2
    error: Bad exit status from /var/tmp/rpm-tmp.84100 (%build)

     
  • Philip de Nier

    Philip de Nier - 2016-08-17

    It appears that libMXF++ is using libMXF header files that don't have the audio channel labels and keys declarations. The audio channel labels and keys were added to libMXF around Jan 19th 2016.

    Could your system have an older version of libMXF installed in /usr/local/include/libMXF-1.0/ for example?

    In the installed libMXF you should see definitions such as "MXF_SET_DEFINITION(MCALabelSubDescriptor, AudioChannelLabelSubDescriptor,..." in mxf/mxf_baseline_data_model.h. You could try "make V=1" so that you see the include paths used in the g++ compile command.

    Philip

     
  • c kron

    c kron - 2016-08-22

    hhhmmm, thanks, yes we have an older version installed. Using this option "V=1" showed that I included both the default path /usr/local/include... AND the new path /var/tmp/bmxlib-20160705.... see the log below. I had no success with telling rpmbuild in my spec file that /var/tmp... is the only path to use (RPM_BUILD_ROOT).
    In the meantime I could build, install and use bmx in our development linux after remoiving the bmx package. But removing old packages is is not the best way to work. Any ideas?

    Christine

    /bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -W -Wall -I/usr/local/include/libMXF-1.0 -I../../.. -I/var/tmp/bmxlib-20160705-build/usr/local/include/libMXF-1.0/ -MT libbase_la-AudioChannelLabelSubDescriptorBase.lo -MD -MP -MF .deps/libbase_la-AudioChannelLabelSubDescriptorBase.Tpo -c -o libbase_la-AudioChannelLabelSubDescriptorBase.lo test -f 'AudioChannelLabelSubDescriptorBase.cpp' || echo './'AudioChannelLabelSubDescriptorBase.cpp

     
    • Philip de Nier

      Philip de Nier - 2016-08-22

      I don't know the details of rpmbuild but when using configure you can set the PKG_CONFIG_PATH enviroment variable to the directory containing the pkg-config which has the include and library paths. E.g. "PKG_CONFIG_PATH=/var/tmp/bmxlib-20160705-build/usr/local/lib/pkgconfig ./configure ...".

      Philip

       
  • c kron

    c kron - 2016-08-29

    Thanks for fixing bmx!!
    I have cloned the 3 git repositories bmx, libmxf and libmxfpp because there ist no tar-file to download.
    I have copied uriparser and expat-directories into the new environment.

    But the build fails: install-sh is missing.
    In fact this file and some others can be found In the bmx folder of the last tar-file bmx-snapshot-20160705.tar but are missing in the bmx-folder of the git repo.
    What is the best way to do?
    Christine

     
    • Philip de Nier

      Philip de Nier - 2016-08-30

      Are you running the autogen.sh in the directory? Automake should be adding the file if it is missing. On my system I get these messages when running autogen.sh:
      ...
      + automake --foreign --add-missing -c
      ...
      configure.ac:28: installing './install-sh'
      ...

      One thing I noticed is that it doesn't install it if a parent directory of the repository had the file. configure appears to check "$srcdir", "$srcdir/.." and "$srcdir/../.." for install-sh. I don't know if that helps your issue.

      Philip

       
  • c kron

    c kron - 2016-08-30

    There is no install-sh in the parent directories,

    I think our automake is too old, but we can't get a newer version for our Linux Distribution.
    the highest available version is 1.10.1

    Running autogen.sh generates the following error:
    ./autogen.sh
    + aclocal -I m4
    configure.ac:29: warning: macro `AM_SILENT_RULES' not found in library
    + libtoolize -c
    + autoheader -f
    + automake --foreign --add-missing -c
    configure.ac:28: require Automake 1.11, but have 1.10.1
    + autoconf
    configure.ac:29: error: possibly undefined macro: AM_SILENT_RULES
    If this token and others are legitimate, please use m4_pattern_allow.
    See the Autoconf documentation.

    Is it possible to copy some files from the last snapshot-tar-file, so that we don't need autogen?

     
    • Philip de Nier

      Philip de Nier - 2016-08-30

      It might work, I don't know. Another option is to see whether configure.ac can be changed to allow your version of autotools to be used. E.g. change the AM_INIT_AUTOMAKE line to AM_INIT_AUTOMAKE([-Wall]) and the AM_SILENT_RULES one to m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]).

      Philip

       
  • c kron

    c kron - 2016-08-31

    Hi Philip, changing the configure.ac worked well!
    I could build the bmx. Thanks!

    I was testing this bmx and we had success with all our use cases, great!

    Best regards from all of us (and from my team leader Mirko Zimmer!)