将32位ARM代码迁移到64位开发环境

时间:2013-01-02 18:49:46

标签: c linux arm

我有一个基于GTK的ARM项目,历史上是在32位Ubuntu虚拟机上开发的。目前,我正在尝试将其迁移到新的64位Arch Linux开发盒。我不知道如何处理我所采取的两条路线所产生的错误。

如果我告诉链接器使用/ usr / lib,编译将停止告诉我

/usr/lib/librt.so: file not recognized: File format not recognized

因此,假设这是一个32位vs 64位的问题,我将gcc指向/ usr / lib32并收到以下内容

/usr/bin/arm-linux-gnueabi - ld: skipping incompatible /usr/lib32/librt.so when searching for -lrt
/usr/bin/arm-linux-gnueabi - ld: skipping incompatible /usr/lib32/librt.a when searching for -lrt
/usr/bin/arm-linux-gnueabi - ld: skipping incompatible /usr/lib32/libpthread.so when searching for -lpthread
/usr/bin/arm-linux-gnueabi - ld: skipping incompatible /usr/lib32/libpthread.a when searching for -lpthread
/usr/bin/arm-linux-gnueabi - ld: cannot find -lz
/usr/bin/arm-linux-gnueabi - ld: cannot find -lsqlite3
/usr/bin/arm-linux-gnueabi - ld: cannot find -lusb-1.0
/usr/bin/arm-linux-gnueabi - ld: cannot find -lssl

等等。我尝试从Arch存储库安装lib32-sqlite无济于事。

对于任一目录,我收到以下警告很多次,我也不确定

/usr/include/pthread.h:672:6: warning: '__regparm__' attribute directive ignored [-Wattributes]
/usr/include/pthread.h:684:3: warning: '__regparm__' attribute directive ignored [-Wattributes]
/usr/include/pthread.h:729:6: warning: '__regparm__' attribute directive ignored [-Wattributes]

我不确定这只是过时代码编译的工件是针对最新的库编写的,还是什么,但这是我想要解决的问题。

编辑:我的目标架构是ARM926EJ-S / i.MX27

2 个答案:

答案 0 :(得分:6)

我打算猜测并说你的交叉编译环境没有引用正确的库/头文件。也就是说,它们引用了构建库/头文件(i586?)而不是ARM arm-linux-gnueabi的交叉编译库/头文件。

答案 1 :(得分:0)

您无法编译64位程序,然后与lib32库链接。

你有2个解决方案:

  • 生成一个与lib32链接的32位程序
  • 生成一个64位lib链接的完全64位程序