Can Tango work with 32-bit device servers

Hello again, I need your help.

Can Tango work with 32-bit device servers and, if it can, how do I create them?

I bumped into a following problem: I have Tango v10.0.2 installed on my Windows 10 x64 PC. I used Visual Studio 2022 to build a test copy of TangoTest device class using CMake and it works fine, as well as some other C++ device classes, built in a similar way. However I also have a very old Windows 7 x32 PC that is connected to the hardware I need to control. Because .exe files compiled for x64 OS don’t work on x32 systems, I choose “x86-Release” configuration in VS when I try to make my device class, but for some reason VS shows numerous errors; although making .exe-s under “x64-Release” always runs smooth with no errors at all.

The errors are something like:

  • “LNK1120 unresolved external elements: 171”
  • “LNK2001 unresolved external symbol …”
  • “LNK2019 link to an unresolved external symbol …”

I believe it’s something in the CMakeLists.txt that I should change in order to buid for older systems. Is it really so? What exactly should I change there?

Yes tango can work with pure 32-bit device servers. I’m not so sure about pure 32bit Windows though.

For building 32bit C++ device server (DS) you need to compile them as 32bit, which you already did, but you also need to use the 32bit cppTango libraries. So download one of the cppTango packages with x86 in their name from Release 10.0.2 · tango-controls / cppTango · GitLab. And this should allow you to compile TangoTest and your DS as pure 32bit binary.

Is it important which x86 package exactly to download or can I use basically any “libtango_10.0.2_v143_x86_*.zip” archive?

Also if I temporarily rename my current folders at TANGO_ROOT and put ones from the downloaded package there, will it be okay for CMake to build a working .exe for the x86 device server?

That depends if you have any requirements on the MSVC runtime libraries? The cppTango shared/static libraries also use shared/static MSVC runtime libraries. If in doubt I would start with libtango_XXX_x64_shared_release.zip/libtango_XXX_x64_static_release.zip.

Also if I temporarily rename my current folders at TANGO_ROOT and put ones from the downloaded package there, will it be okay for CMake to build a working .exe for the x86 device server?

Should be okay.