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

版权声明:本文为博主(宽简厚重,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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值