我有一个基于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
答案 0 :(得分:6)
我打算猜测并说你的交叉编译环境没有引用正确的库/头文件。也就是说,它们引用了构建库/头文件(i586?)而不是ARM arm-linux-gnueabi
的交叉编译库/头文件。
答案 1 :(得分:0)
您无法编译64位程序,然后与lib32库链接。
你有2个解决方案: