简体   繁体   English

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

[英]Having trouble compiling 32-bit binary on 64-bit linux armv8 machine

I am trying to use a c++ ARM 32-bit library on a Jetson Tx2, which is an ARM 64-bit linux machine. 我正在尝试在Jetson Tx2(这是一台ARM 64位linux计算机)上使用c ++ ARM 32位库。 When I try to compile some of the sample code provided with the library I get the following compilation error: 当我尝试编译库提供的一些示例代码时,出现以下编译错误:

/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 StackOverflow forums on similar issues, and in accordance with those forum recommendations added the -m32 flag to CXXFLAGS and LDFLAGS when I compile. 我一直在浏览有关类似问题的其他StackOverflow论坛,并根据这些论坛的建议在编译时在CXXFLAGS和LDFLAGS中添加了-m32标志。 However, I then get the following error: 但是,然后出现以下错误:

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 StackOverflow threads said that in order to use the -m32 flag, one has to run the command: 其他一些StackOverflow线程表示,要使用-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. 更新:我意识到-m32标志仅在x86 linux计算机上受支持。 Does anyone know if there is some equivalent for ARM machines? 有人知道ARM机器是否有同等的机器?

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/x86-Options.html

https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AArch64-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; 对于GNU编译器来说,x86是CPU的一种。 you can create 16-, 32- or 64-bit code for this CPU type. 您可以为此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; 当然,将不接受32位库。 an ARM compiler would not accept a x86 library, either. ARM编译器也不接受x86库。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM