0

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

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

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

因此,假设这是一个 32 位与 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

4

2 回答 2

6

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

于 2013-01-02T19:05:16.197 回答
0

您不能编译 64 位程序然后与 lib32 库链接。

您有 2 个解决方案:

  • 生成与 lib32 链接的 32 位程序
  • 生成与 64 位库链接的完全 64 位程序
于 2013-01-02T18:52:59.230 回答