undefined reference to __udivdi3问题之解决

编译时有时会遇到这种错误:

undefined reference to `__udivdi3'

嵌入式中,32位系统中(目前多数系统都是,比如ARM的片子),对于普通的a除以b(b为32位):

(1)当a为32位,Linux 内核中,常用uint32_t 类型,可以直接写为 a/b

(2)但是,对于a是64位,uint64_t的时候,就要用到专门的除操作相关的函数,linux内核里面一般为

do_div(n, base),注意,此处do_div得到的结果是余数而真正的a/b的结果,是用a来保存的

do_div(n,base)的具体定义,和当前体系结构有关,对于arm平台,在include/asm-arm/div64.h

因此,如果你当前写代码,a/b,如果a是uint64_t类型,那么一定要利用do_div(a,b),而得到结果a,

而不能简单的用a/b,否则编译可以正常编译,但是最后链接最后出错,会提示上面的那个错误:

undefined reference to "__udivdi3"

根据提供的引用内容,"undefined reference to __ashldi3"错误通常是由于缺少对应的库文件或链接错误导致的。这个错误通常与编译器和链接器有关。 解决这个问题的方法有以下几种: 1. 确保链接器能够找到正确的库文件。你可以尝试在编译命令中添加对应的库文件路径和库文件名。例如,如果你使用的是gcc编译器,可以使用"-L"选项指定库文件路径,使用"-l"选项指定库文件名。例如: ```shell gcc -o output_file source_file.c -L/path/to/library -lmylibrary ``` 2. 检查库文件是否正确安装。如果你使用的是第三方库,确保你已经正确安装了该库,并且库文件的路径正确。 3. 检查编译选项是否正确。有时候,编译选项可能会导致链接错误。你可以尝试修改编译选项,例如添加或删除一些选项,以解决链接错误。 4. 检查代码中是否存在语法错误或其他错误。有时候,链接错误可能是由于代码中的错误导致的。确保你的代码没有语法错误,并且所有的函数和变量都正确定义和引用。 5. 如果以上方法都无效,你可以尝试重新编译和链接整个项目。有时候,重新编译和链接可以解决一些链接错误。 请注意,以上方法只是一些常见的解决链接错误的方法,具体的解决方法可能因情况而异。如果你能提供更多的上下文信息,例如你使用的编译器和链接器版本,以及你的代码和编译命令,我可以给出更具体的建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值