Page 1 of 1

交叉编译出来的程序放到luckfoxpico中之后无法运行

Posted: 2024-01-16 5:56
by 传说之葱
初学者小白,想问问大佬为什么交叉编译出来的程序放在开发板上运行的时候显示缺少libc.so.0?
按照教程编译了一个helloWorld的程序程序代码如下:

Code: Select all

#include <stdio.h>
int main()
{
    printf("Hello World!\n");
}
然后指定了交叉编译工具后,使用以下命令编译

Code: Select all

arm-rockchip830-linux-uclibcgnueabihf-gcc helloworld.c -o helloworld
之后将生成的HelloWorld文件放到了开发板上,修改权限chmod 777 helloworld,然后运行的时候出现:

Code: Select all

bash: ./helloworld: No such file or directory
再次检查了目录确实是有helloworld文件在的,我就使用ldd查了一下依赖,发现结果是这样的:

Code: Select all

root@luckfox:/home/pico/demo# ldd helloworld 
	libc.so.0 => not found
不知道为什么无法运行?

在查了两天相关解决方案无果后,只好来论坛烦劳大佬们指教!

Re: 交叉编译出来的程序放到luckfoxpico中之后无法运行

Posted: 2024-01-16 6:34
by Luckfox Taylor
买回去重新烧录系统了嘛?正常是不缺这个库文件的

Re: 交叉编译出来的程序放到luckfoxpico中之后无法运行

Posted: 2024-01-16 8:02
by 传说之葱
Luckfox Taylor wrote: 2024-01-16 6:34 买回去重新烧录系统了嘛?正常是不缺这个库文件的
我重新烧录系统了,用的是LuckFox Pico Max板子,烧录的ubuntu系统到SD卡中的。

pico的ubuntu镜像,编译前根据配置修改了gitee源,随后我在虚拟机的ubuntu系统上使用如下官方wiki的代码编译的:

Code: Select all

sudo ./build.sh lunch   
sudo ./build.sh
然后编译时选择了以下分支:

Code: Select all

5. BoardConfig_IPC/BoardConfig-EMMC-Ubuntu-RV1106_Luckfox_Pico_Pro_Max-IPC.mk
最后编译成功后,再使用瑞芯微工具烧录到sd卡中的,而且已经擦除了SPI NAND Flash。

关于上面我的运行账号是root是因为:我先是使用了pico账号登录,我怀疑是不是权限的问题,就创建了root账号,之后索性就用root账号来进行测试了。

至于为什么我怀疑是交叉编译工具的问题,是因为我尝试使用c++来写了一个helloworld.cpp:

Code: Select all

#include <iostream>
int main() {
    std::cout << "Hello, C++ Standard Library!" << std::endl;
    return 0;
}
运行结果也会出现错误,错误如下:

Code: Select all

root@luckfox:/home/pico/demo# ./helloworld_cpp
bash: ./helloworld_cpp: No such file or directory
我尝试ldd如下:

Code: Select all

root@luckfox:/home/pico/demo# ldd helloworld_cpp
	libstdc++.so.6 => /lib/arm-linux-gnueabihf/libstdc++.so.6 (0xa6d60000)
	libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xa6d30000)
	libc.so.0 => not found
	libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xa6cd0000)
	libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xa6ba0000)
	/lib/ld-uClibc.so.0 => /lib/ld-linux-armhf.so.3 (0xa6ee3000)
发现虽然也有正确指向c标准库的libc.so.6的依赖,但是仍然提示其缺少libc.so.0。
所以我不知道我是哪里除了问题,很头大

Re: 交叉编译出来的程序放到luckfoxpico中之后无法运行

Posted: 2024-01-16 8:27
by Eng33
你好,
ubuntu系统使用的glibc,而我们工具链为uclibc,所以程序无法通用
解决方法:
ubuntu系统请在连接网络后使用apt下载gcc与make,直接在板子上编译即可。
注:
使用ubuntu系统会导致RK提供的组件无法使用,如果想要完整使用板子的功能还是建议使用busybox

Re: 交叉编译出来的程序放到luckfoxpico中之后无法运行

Posted: 2024-01-16 8:30
by 传说之葱
Eng33 wrote: 2024-01-16 8:27 你好,
ubuntu系统使用的glibc,而我们工具链为uclibc,所以程序无法通用
解决方法:
ubuntu系统请在连接网络后使用apt下载gcc与make,直接在板子上编译即可。
注:
使用ubuntu系统会导致RK提供的组件无法使用,如果想要完整使用板子的功能还是建议使用busybox
好的,谢谢!