解决交叉编译应用程序出现的错误“ld: cannot find crtend_so.o: No such file or directory”错误

来源:互联网 发布:昆明大成网络招聘骗局 编辑:程序博客网 时间:2024/05/17 21:51

版权声明:本文为博主(宽简厚重,Yuesichiu)原创文章,未经博主允许不得转载。

http://blog.csdn.net/yuesichiu/article/details/78353674


交叉编译工具链:aarch64-linux-android-gcc


最近在编译安卓环境下的Linux应用程序(C代码),编译C代码应用工具时报错“ld: cannot find crtend_so.o: No such file or directory”。

找了一圈,不知道crtbegin_so.o/crtend_so.o是什么玩意。

查看了bionic/libc/arch-common/bionic/crtend_so.S和bionic/libc/arch-common/bionic/asm_multiarch.h这两个文件,应该是编译应该程序时指定符号链接正确的平台、相关的字节对齐,动态库open/close之类的。

bionic/libc/arch-common/bionic/asm_multiarch.h内容如下:

#ifdef __LP64__# define ASM_PTR_SIZE(x) .quad x# define ASM_ALIGN(x)#else# define ASM_PTR_SIZE(x) .long x# define ASM_ALIGN(x)    .align x#endif


版权声明:本文为博主(宽简厚重,Yuesichiu)原创文章,未经博主允许不得转载。

http://blog.csdn.net/yuesichiu/article/details/78353674


再看bionic/libc/arch-common/bionic/crtend_so.S文件:

#ifdef __LP64__# define ASM_PTR_SIZE(x) .quad x# define ASM_ALIGN(x)#else# define ASM_PTR_SIZE(x) .long x# define ASM_ALIGN(x)    .align x#endif


版权声明:本文为博主(宽简厚重,Yuesichiu)原创文章,未经博主允许不得转载。

http://blog.csdn.net/yuesichiu/article/details/78353674


再看bionic/libc/arch-common/bionic/crtbegin_so.c文件:

extern void __cxa_finalize(void *);extern void *__dso_handle;__attribute__((visibility("hidden"),destructor))void __on_dlclose() {  __cxa_finalize(&__dso_handle);}#ifdef CRT_LEGACY_WORKAROUND# include "__dso_handle.h"#else# include "__dso_handle_so.h"# include "atexit.h"#endif#ifdef __i386__# include "../../arch-x86/bionic/__stack_chk_fail_local.h"#endif

解决方法如下:

在C源代码目录上,创建一个crtbegin_so.o和crtend_so.o文件的软连接即可。

#cd sourcecode_dir#ln -s /path/to/out/target/product/ap7350_65u_l1/obj/lib/crtbegin_so.o .#ln -s /path/to/out/target/product/ap7350_65u_l1/obj/lib/crtend_so.o .



版权声明:本文为博主(宽简厚重,Yuesichiu)原创文章,未经博主允许不得转载。

http://blog.csdn.net/yuesichiu/article/details/78353674






阅读全文
0 0
原创粉丝点击