Arch linux compilation errors

Hi

Im new to Tango software. Im trying to compile tango on Arch linux for my project. I tried to install it from Arch aur repositories without success. I got same during manual compilation. Below you can see part of error trace.


make[5]: Entering directory '/home/arek/.cache/yay/tango/src/tango-9.3.4/lib/cpp/client'
  CXX      dbapi_class.lo
  CXX      dbapi_server.lo
  CXX      dbapi_datum.lo
  CXX      dbapi_base.lo
  CXX      dbapi_device.lo
  CXX      dbapi_history.lo
  CXX      dbapi_attribute.lo
  CXX      dbapi_cache.lo
  CXX      dbapi_serverdata.lo
  CXX      devapi_attr.lo
  CXX      devapi_base.lo
  CXX      devapi_data.lo
devapi_data.cpp: In function ‘std::ostream& Tango::operator<<(std::ostream&, Tango::DeviceData&)’:
devapi_data.cpp:2330:24: error: ambiguous overload for ‘operator>>=’ (operand types are ‘CORBA::Any_var’ and ‘long long int’)
 2330 |                 dd.any >>= ll_tmp;
      |                 ~~~~~~~^~~~~~~~~~
In file included from /usr/include/omniORB4/CORBA.h:116,
                 from ../../../lib/cpp/server/idl/tango.h:6,
                 from ../../../lib/cpp/server/tango.h:46,
                 from devapi_data.cpp:35:
/usr/include/omniORB4/CORBA_Any_vartypes.h:182:18: note: candidate: ‘CORBA::Boolean CORBA::Any_var::operator>>=(CORBA::Short&) const’ (near match)
  182 |   inline Boolean operator>>=(Short& s) const {
      |                  ^~~~~~~~
/usr/include/omniORB4/CORBA_Any_vartypes.h:182:18: note:   conversion of argument 1 would be ill-formed:
devapi_data.cpp:2330:28: error: cannot bind non-const lvalue reference of type ‘CORBA::Short&’ {aka ‘short int&’} to a value of type ‘long long int’
 2330 |                 dd.any >>= ll_tmp;
      |                            ^~~~~~
In file included from /usr/include/omniORB4/CORBA.h:116,
                 from ../../../lib/cpp/server/idl/tango.h:6,
                 from ../../../lib/cpp/server/tango.h:46,
                 from devapi_data.cpp:35:
/usr/include/omniORB4/CORBA_Any_vartypes.h:185:18: note: candidate: ‘CORBA::Boolean CORBA::Any_var::operator>>=(CORBA::UShort&) const’ (near match)
  185 |   inline Boolean operator>>=(UShort& u) const {
      |                  ^~~~~~~~
/usr/include/omniORB4/CORBA_Any_vartypes.h:185:18: note:   conversion of argument 1 would be ill-formed:
devapi_data.cpp:2330:28: error: cannot bind non-const lvalue reference of type ‘CORBA::UShort&’ {aka ‘short unsigned int&’} to a value of type ‘long long int’
 2330 |                 dd.any >>= ll_tmp;
      |                            ^~~~~~
In file included from /usr/include/omniORB4/CORBA.h:116,
                 from ../../../lib/cpp/server/idl/tango.h:6,
                 from ../../../lib/cpp/server/tango.h:46,
                 from devapi_data.cpp:35:
/usr/include/omniORB4/CORBA_Any_vartypes.h:188:18: note: candidate: ‘CORBA::Boolean CORBA::Any_var::operator>>=(CORBA::Long&) const’ (near match)
  188 |   inline Boolean operator>>=(Long& l) const {
      |                  ^~~~~~~~
/usr/include/omniORB4/CORBA_Any_vartypes.h:188:18: note:   conversion of argument 1 would be ill-formed:
devapi_data.cpp:2330:28: error: cannot bind non-const lvalue reference of type ‘CORBA::Long&’ {aka ‘int&’} to a value of type ‘long long int’
 2330 |                 dd.any >>= ll_tmp;
      |                            ^~~~~~
In file included from /usr/include/omniORB4/CORBA.h:116,
                 from ../../../lib/cpp/server/idl/tango.h:6,
                 from ../../../lib/cpp/server/tango.h:46,
                 from devapi_data.cpp:35:
/usr/include/omniORB4/CORBA_Any_vartypes.h:191:18: note: candidate: ‘CORBA::Boolean CORBA::Any_var::operator>>=(CORBA::ULong&) const’ (near match)
  191 |   inline Boolean operator>>=(ULong& u) const {
      |                  ^~~~~~~~
/usr/include/omniORB4/CORBA_Any_vartypes.h:191:18: note:   conversion of argument 1 would be ill-formed:
devapi_data.cpp:2330:28: error: cannot bind non-const lvalue reference of type ‘CORBA::ULong&’ {aka ‘unsigned int&’} to a value of type ‘long long int’
 2330 |                 dd.any >>= ll_tmp;


For me it looks like sime corba version issue. Did anyone had similar issues ? Any hints on how to solve it ?

Thanks
Arek

Hi Arek,

Welcome!

Are you trying to compile on 32 bits?
It looks like ll_tmp is defined as a long long in your use case, meaning TANGO_LONG32 is defined.
TANGO_LONG32 is defined when the sizeof of a long is 8.

Could you please confirm you’re trying to build in 32 bits?
What version of CORBA are you using? Is it a 32 bits version too?

Kind regards,
Reynald

Hi

Im trying to compile for x86_64

This is my ./configure command

./configure --host=x86_64 --enable-java=yes --enable-mariadb=yes --enable-dbserver=yes --enable-dbcreate=yes --with-mysql-admin=root --with-mysql-admin-passwd='my_secret_pwd' --prefix=/usr/local/tango

Or maybe im doing it wrong ? I also tried to build with host=i686 and some others and i got same issue. Any hints on that ? Is there anything that i could provide you which would help to analyze it ?

My Tango source is from latest release from tango web for linux.

Thanks
Arek

@agibes: Can you post your configure.log file? And did you try AUR (en) - tango already?

Hi

Yes i tried both ways doing it manualy and via arch aur repo. In both ways i got same error.

Thanks
Arek

Sorry, I made some mistakes in my previous comment.

TANGO_LONG32 is defined when the sizeof(long) is different than 8!

Could you please have a look at the definition of SIZEOF_LONG in omniORB4/acconfig.h in your use case?

In my use case on a 64 bits system, I get:

/* The size of `long', as computed by sizeof. */
#define SIZEOF_LONG 8

This is the part of acconfig.h file:

/* The size of `bool', as computed by sizeof. */
#define SIZEOF_BOOL 1

/* The size of `char', as computed by sizeof. */
#define SIZEOF_CHAR 1

/* The size of `double', as computed by sizeof. */
#define SIZEOF_DOUBLE 8

/* The size of `float', as computed by sizeof. */
#define SIZEOF_FLOAT 4

/* The size of `int', as computed by sizeof. */
#define SIZEOF_INT 4

/* The size of `long', as computed by sizeof. */
#define SIZEOF_LONG 8

/* The size of `long double', as computed by sizeof. */
#define SIZEOF_LONG_DOUBLE 16

/* The size of `long long', as computed by sizeof. */
#define SIZEOF_LONG_LONG 8

/* The size of `short', as computed by sizeof. */
#define SIZEOF_SHORT 2

/* The size of `unsigned char', as computed by sizeof. */
#define SIZEOF_UNSIGNED_CHAR 1

/* The size of `void*', as computed by sizeof. */
#define SIZEOF_VOIDP 8

/* The size of `wchar_t', as computed by sizeof. */
#define SIZEOF_WCHAR_T 4

Is it correct that LONG and LONG LONG have same sizes ?

Ohhh i found that i have more of those files. In /usr/include/omniORB4/acconfig.h i found tha it uses some OMNI_ prefix. I guese that’s the default header file that is used during forte compilation.

/* The size of `bool', as computed by sizeof. */
#define OMNI_SIZEOF_BOOL 1

/* The size of `char', as computed by sizeof. */
#define OMNI_SIZEOF_CHAR 1

/* The size of `double', as computed by sizeof. */
#define OMNI_SIZEOF_DOUBLE 8

/* The size of `float', as computed by sizeof. */
#define OMNI_SIZEOF_FLOAT 4

/* The size of `int', as computed by sizeof. */
#define OMNI_SIZEOF_INT 4

/* The size of `long', as computed by sizeof. */
#define OMNI_SIZEOF_LONG 8

/* The size of `long double', as computed by sizeof. */
#define OMNI_SIZEOF_LONG_DOUBLE 16

/* The size of `long long', as computed by sizeof. */
#define OMNI_SIZEOF_LONG_LONG 8

/* The size of `short', as computed by sizeof. */
#define OMNI_SIZEOF_SHORT 2

/* The size of `unsigned char', as computed by sizeof. */
#define OMNI_SIZEOF_UNSIGNED_CHAR 1

/* The size of `void*', as computed by sizeof. */
#define OMNI_SIZEOF_VOIDP 8

/* The size of `wchar_t', as computed by sizeof. */
#define OMNI_SIZEOF_WCHAR_T 4

/* Define to the type of getsockname's third argument */
#define OMNI_SOCKNAME_SIZE_T socklen_t


Indeed this could probably explain the compilation error you’re seeing.
Do you know what version of omniORB is installed under /usr/include/omniORB4?

Im not sure but it looks like default package from AUR is 4.3.0.1 AUR (en) - omniorb I also did quick test with adding those defines without prefixes below and it works i can compile it. But it’s not a best way to edit include files :frowning: The question is if i didn’t mess up something by doing that.

Thanks
Arek

omniORB 4.3 is not yet supported by Tango and it will probably not be supported on cppTango 9.3.
See for instance Add support for omniORB 4.3.0 (#760) · Issues · tango-controls / cppTango · GitLab

You’ll probably have to wait for cppTango 9.4 (9.4.0 should be released on 2nd October 2022. Not sure that omniORB 4.3 will be already supported).

Could you install omniORB4.2.x on your system instead?

You might be able to use --omni option (with 2 dashes) when running configure to specify a non-standard omniORB install location.

The following environment variables might be useful too.

  omniORB4_CFLAGS
              C compiler flags for omniORB4, overriding pkg-config
  omniORB4_LIBS
              linker flags for omniORB4, overriding pkg-config
  omniCOS4_CFLAGS
              C compiler flags for omniCOS4, overriding pkg-config
  omniCOS4_LIBS
              linker flags for omniCOS4, overriding pkg-config

You can get all these options and environment variables by running configure --help (2 dashes here).

I’m not 100% sure that it will bypass the omniORB 4.3 version installed on your system but it might be worth a try.