clang链接错误:未定义引用'qsort'

时间:2016-12-16 20:21:27

标签: c clang minix

尽管我在代码中加入了“#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时给出链接错误( )。

1 个答案:

答案 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;这不是通常的做法,因此预计会遇到问题。)