在64位linux armv8机器上编译32位二进制文​​件时遇到问题

时间:2022-01-22 23:40:59

I am trying to use a c++ ARM 32-bit library on a Jetson Tx2, which is an ARM 64-bit linux machine. When I try to compile some of the sample code provided with the library I get the following compilation error:

我试图在Jetson Tx2上使用c ++ ARM 32位库,这是一个ARM 64位Linux机器。当我尝试编译库提供的一些示例代码时,我得到以下编译错误:

/usr/bin/ld: skipping incompatible /home/nvidia/libroyale/bin/libroyale.so 
when searching for -lroyale
/usr/bin/ld: cannot find -lroyale
collect2: error: ld returned 1 exit status
CMakeFiles/sampleCameraInfo.dir/build.make:94: recipe for target  
'sampleCameraInfo' failed
make[2]: *** [sampleCameraInfo] Error 1
CMakeFiles/Makefile2:67: recipe for target  
'CMakeFiles/sampleCameraInfo.dir/all' failed
make[1]: *** [CMakeFiles/sampleCameraInfo.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

I assume that this error is because the 32-bit library is somehow incompatible with a 64-bit machine.

我假设这个错误是因为32位库在某种程度上与64位机器不兼容。

I have been browsing other * forums on similar issues, and in accordance with those forum recommendations added the -m32 flag to CXXFLAGS and LDFLAGS when I compile. However, I then get the following error:

我一直在浏览其他类似问题的*论坛,并根据这些论坛建议在编译时将-m32标志添加到CXXFLAGS和LDFLAGS。但是,我得到以下错误:

g++: error: unrecognized command line option ‘-m32’
CMakeFiles/sampleCameraInfo.dir/build.make:62: recipe for target 
'CMakeFiles/sampleCameraInfo.dir/sampleCameraInfo.cpp.o' failed
make[2]: *** [CMakeFiles/sampleCameraInfo.dir/sampleCameraInfo.cpp.o]   Error 1
CMakeFiles/Makefile2:67: recipe for target 
'CMakeFiles/sampleCameraInfo.dir/all' failed
make[1]: *** [CMakeFiles/sampleCameraInfo.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

Some other * threads said that in order to use the -m32 flag, one has to run the command:

其他一些*线程表示,为了使用-m32标志,必须运行命令:

sudo apt-get install g++-multilib

I don't think that the installation is working correctly, as I'm getting the following errors:

我不认为安装工作正常,因为我收到以下错误:

Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
g++-multilib:armhf : Depends: cpp:armhf (>= 4:5.3.1-1ubuntu1) but it is
not going to be installed
                  Depends: gcc-multilib:armhf (>= 4:5.3.1-1ubuntu1) but it is not going to be installed
                  Depends: g++:armhf (>= 4:5.3.1-1ubuntu1) but it is not going to be installed
                  Depends: g++-5-multilib:armhf (>= 5.3.1-3~) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Any suggestions would be very much appreciated. Thanks!

任何建议将非常感谢。谢谢!

UPDATE: I realized that the -m32 flag is only supported on x86 linux machines. Does anyone know if there is some equivalent for ARM machines?

更新:我意识到-m32标志仅在x86 linux机器上受支持。有谁知道ARM机器是否有一些等价物?

1 个解决方案

#1


0  

I had a look at the GCC documentation, especially on the following pages:

我查看了GCC文档,特别是在以下页面中:

https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/x86-Options.html

https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AArch64-Options.html

Looks like for the GNU compilers x86 is one type of CPU; you can create 16-, 32- or 64-bit code for this CPU type.

看起来像GNU编译器x86是一种类型的CPU;您可以为此CPU类型创建16位,32位或64位代码。

However it also looks like for the GNU compilers 32-bit ARM CPUs and 64-bit ARM CPUs are two completely different CPU types.

然而,对于GNU编译器来说,32位ARM CPU和64位ARM CPU也是两种完全不同的CPU类型。

Therefore compiling for 32-bit ARM with a 64-bit ARM compiler is the same as compiling for x86 with an ARM compiler: It won't work.

因此,使用64位ARM编译器编译32位ARM与使用ARM编译器编译x86相同:它不起作用。

Of course the 32-bit library will not be accepted; an ARM compiler would not accept a x86 library, either.

当然不接受32位库; ARM编译器也不接受x86库。

#1


0  

I had a look at the GCC documentation, especially on the following pages:

我查看了GCC文档,特别是在以下页面中:

https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/x86-Options.html

https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AArch64-Options.html

Looks like for the GNU compilers x86 is one type of CPU; you can create 16-, 32- or 64-bit code for this CPU type.

看起来像GNU编译器x86是一种类型的CPU;您可以为此CPU类型创建16位,32位或64位代码。

However it also looks like for the GNU compilers 32-bit ARM CPUs and 64-bit ARM CPUs are two completely different CPU types.

然而,对于GNU编译器来说,32位ARM CPU和64位ARM CPU也是两种完全不同的CPU类型。

Therefore compiling for 32-bit ARM with a 64-bit ARM compiler is the same as compiling for x86 with an ARM compiler: It won't work.

因此,使用64位ARM编译器编译32位ARM与使用ARM编译器编译x86相同:它不起作用。

Of course the 32-bit library will not be accepted; an ARM compiler would not accept a x86 library, either.

当然不接受32位库; ARM编译器也不接受x86库。