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

时间:2017-07-07 17:46:01

标签: c++ linux ubuntu-16.04

我正在尝试在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

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

我一直在浏览其他类似问题的StackOverflow论坛,并根据这些论坛建议在编译时将-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

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

sudo apt-get install g++-multilib

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

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.

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

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

1 个答案:

答案 0 :(得分:0)

我查看了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

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

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

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

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