Linking error: Binary file_name "uses VFP register arguments," and library_name.a (object_file.o) "does not"

Hi,

Cross compile the 3rd party SDK. For Cross compile, use the 32-bit BSP tool chain, then got the errors as:

Binary file_name “uses VFP register arguments,” and library_name.a (object_file.o) “does not”
Binary file_name “uses VFP register arguments,” and library_name.a (object_file.o) “does not”

Here, library file is binary file and do not have the source code for this.

How to link these files?

-Thanks.

Hi,

Whether we need to add these flags in Makefile:

-mfloat-abi=hard -mfpu=neon -marm -mthumb-interwork

For Tegra Tx2 processor, what are the flags required? or what is the cause for this?

-Thanks.

Hi BalajiNP,

Are you using https://developer.nvidia.com/embedded/dlc/l4t-gcc-toolchain-32-bit-28-1
If yes, why don’t you use 64-bit one (https://developer.nvidia.com/embedded/dlc/l4t-gcc-toolchain-64-bit-28-1) ?

Hi Vickyy,

Thanks for the reply.

3rd party software vendor wants their SDK code has to compiled in 32-bit tool chain with software floating point enabled, not the hardware floating point.

Looking for these options.

-Thanks.

Your hardware and libraries are hard floating point…at least in part…and other parts are not. Some part of your setup is expecting hard float. Other parts seem to expect soft float.

Just a side note…the 32-bit on the TX2 is ARMv8, the 64-bit is ARMv8-a. ARMv7 (including armhf) has options related to whether or not floating point and NEON hardware are present, ARMv8 does not…they must be present. If you are using a 32-bit BSP for ARMv8 32-bit compatibility mode, then you cannot specify NEON or thumb…those are invalid options because this hardware must be present in this hardware case. I would double check that your entire 32-bit BSP is actually ARMv8 and not ARMv7 (ARMv7 code can execute on ARMv8…some of ARMv8 can execute on ARMv7…not all of ARMv8 can execute on ARMv7).