- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 lib.h 中有一个自定义函数 strlen()
inline int strlen(char * String)
{
register int __res;
__asm__ __volatile__ ( "cld \n\t"
"repne \n\t"
"scasb \n\t"
"notl %0 \n\t"
"decl %0 \n\t"
:"=c"(__res)
:"D"(String),"a"(0),"0"(0xffffffff)
:
);
return __res;
}
在printk.c中调用
#include "lib.h"
....
len=strlen(s);
当我尝试链接由 gcc 成功编译的 printk.o 时
ld -b elf64-x86-64 -z muldefs -o system head.o main.o printk.o -T kernel.lds
我得到
ld: printk.o: in function `vsprintf':
printk.c:(.text+0x7b1): undefined reference to `strlen'
我尝试使用 -L,但它不起作用。
最佳答案
在 C 中,当您将函数声明为 inline
时,您还必须将其声明为 extern
在一个(并且只有一个)编译单元中。因此,在您的一个(并且只有一个)具有 #include "lib.h"
的 .c 文件中添加 extern int strlen(char *);
在该编译单元中获取内联函数的外部定义,以满足任何未内联的链接请求(无论出于何种原因)。
当您将函数声明为 inline
时没有 extern
,它定义了一个函数版本,如果编译器选择这样做,它可以被内联到任何调用站点中,但不会作为“独立”函数包含在内。但是,不能保证任何给定的调用或使用都将被内联(并且通常只有在启用优化时才会被内联)。因此,如果存在对该函数的任何非内联引用,则需要确保在某处有该函数的外部定义。
关于c - 如何让ld链接头文件中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64647416/
我正在尝试制作一个动画角色,可以在不移动他的躯干的情况下伸手去拿屏幕上的东西。 如果他够不到,他的手应该朝这个方向移动最大量,然后被他的静态躯干的物理限制所抵消。 所以在我的代码中,绿色矩形( han
似乎有很多关于 Vulkan 新图形 API 的讨论 - https://www.khronos.org/vulkan 我的问题与 - 现有的 EGL 接口(interface)将如何适应 Vulka
首先,感谢@Smick 提供此处发布的初始车辆代码: Sprite Kit pin joints appear to have an incorrect anchor 我正在尝试在车轮(左轮)和底盘之
我是一名优秀的程序员,十分优秀!