尽管我在代码中加入了“#include”,但当我使用内置的qsort函数时,clang给了我错误:
schedule.o: In function `chooseTicket':
schedule.c:(.text+0x16d): undefined reference to `qsort'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
文件的开头(schedule.c)是这样的:
#include "sched.h"
#include "schedproc.h"
#include <assert.h>
#include <minix/com.h>
#include <machine/archtypes.h>
#include <stdlib.h>
#include <lib.h>
#include <string.h>
#include <time.h>
这是我使用qsort内置函数
的函数int chooseTicket(int* ticketList,int length,int totalTicket){
int randomValue;
int temp=0,prevTemp=0,selectedTicket=0,selectedIndex = 0;
time_t t;
struct schedproc *rmp;
int* sortedTicketList = malloc(length*sizeof(int));
memcpy(sortedTicketList,ticketList,length);
srandom((unsigned)time(&t));
randomValue = (random() % totalTicket);
qsort(sortedTicketList,length,sizeof(int),cmpFunc);//this line
注意:'rand()'和'srand()'函数也出现了相同的错误,而我使用了'random()'和'srandom()',然后问题就解决了。我不明白,尽管'rand()'和'srand()'是普遍接受的函数,而头文件包含这些函数,为什么clang会在我使用'rand()'和'srand时给出链接错误( )。
答案 0 :(得分:1)
首先,qsort
不是built-in,而是C standard library的一部分(正式来说,适用于托管环境。)
其次,您需要了解#include
仅允许访问任何给定库中函数的声明。您需要链接到库,以便您的程序实际执行对functionnality的调用。由于您在此处收到链接器错误,因此没有#include
会有所帮助。
我猜你正在编写一个MINIX服务,因此与libminc
而不是完整的标准库(&#34; libc
&#34;)相关联;换句话说,这是一个独立的环境。它发生qsort()
不在受限制的C函数集included in libminc
.
具体与qsort.(c|o)
链接;或者展开您自己的libminc
本地版本,以包含qsort()
;或者吃整个蛋糕并与完整的libc
相关联,或许可以将DPADD+= ${LIBC}; LDADD+= -lc
添加到Makefile
(我从未尝试过这样做,但它应该在某个时候起作用, according to the code;这不是通常的做法,因此预计会遇到问题。)