rdtsc - 对rdtsc的未定义引用

  显示原文与译文双语对照的内容

我编写代码来创建树和创建树的不同方法。 我似乎无法让rdtsc正常工作。

这是我的代码:


 #include <stdio.h>
 #include <stdlib.h>
 #define SIZE 10
 struct tnode {
 int val;
 struct tnode *left;
 struct tnode *right;
 };
 struct tnode *addnode(struct tnode *p, long n);
 void treeprint(struct tnode *p);

 main () {
 long data[SIZE]={6, 3, 8, 1, 7, 5, 2, 9, 0, 4};
 int i;
 struct tnode *node, *root;
 unsigned long long rdtsc();
 unsigned long long a, b;

 printf("size of tnode = %dn", sizeof(struct tnode));
 printf("size of *node = %dn", sizeof *node);
 printf("size of &node = %dn", sizeof &node);
 printf("size of root = %dn", sizeof root);
 printf("size of *root = %dn", sizeof *root);
 printf("size of &root = %dn", sizeof &root);

 a = rdtsc();
 root = NULL;
 for (i = 0; i <SIZE; i++)
 root = addnode(root, data[i]);
 b = rdtsc();
 treeprint(root);
 printf("It took %llu to make this tree.n", b-a);
 }

假设上面列出的所有函数都处理了( 除了 rdtsc,当然) 。

试图编译时,出现这里错误:


/tmp/cccnojMf.o: In function `main':
tree.c:(.text+0xd9): undefined reference to `rdtsc'
tree.c:(.text+0x120): undefined reference to `rdtsc'
collect2: ld returned 1 exit status

为什么我得到这个未定义的引用错误?

时间:

添加并用作函数。


 __inline__ uint64_t rdtsc(void)
 {
uint32_t lo, hi;
__asm__ __volatile__ (
"xorl %%eax,%%eax n cpuid"
 :::"%rax","%rbx","%rcx","%rdx");
__asm__ __volatile__ ("rdtsc" :"=a" (lo),"=d" (hi));
return (uint64_t)hi <<32 | lo;
 }

...