首页 > 解决方案 > 来自 C 标准库的 mergesort() 的链接错误

问题描述

这是我的源文件,但是当我编译它时,我得到了对合并排序的未定义引用。

#include <lcthw/darray_algos.h>
#include <stdlib.h>

    int DArray_qsort(DArray * array,DArray_compare cmp)
    {
    qsort(array->contents,   DArray_count(array), sizeof(void *), cmp);
    return 0;
    }

    int DArray_heapsort(DArray * array, DArray_compare cmp)
    {
    return heapsort(array->contents, DArray_count(array),
            sizeof(void *), cmp);
    }

    int DArray_mergesort(DArray * array, DArray_compare cmp)
    {
    return mergesort(array->contents, DArray_count(array),
            sizeof(void *), cmp);
    }

我不知道如何正确链接 stdlib 排序函数我一直在使用这个通用的 makefile,但它似乎未能使 stdlib

   CFLAGS=-g -O2 -Wall -Wextra -Isrc    -rdynamic -DNDEBUG $(OPTFLAGS)
LDFLAGS=$(OPTLIBS)
PREFIX?=/usr/local

SOURCES=$(wildcard src/**/*.c src/*.c)
OBJECTS=$(patsubst %.c,%.o,$(SOURCES))

TEST_SRC=$(wildcard tests/*_tests.c)
TESTS=$(patsubst %.c,%,$(TEST_SRC))

TARGET=build/liblcthw.a

OS=$(shell lsb_release -si)
ifeq ($(OS),Ubuntu)
    LDLIBS=-llcthw -lbsd -L./build -lm
endif

# The Target Build
all: $(TARGET) tests

dev: CFLAGS=-g -Wall -Isrc -Wall -Wextra $(OPTFLAGS)
dev: all

$(TARGET): CFLAGS += -fPIC
$(TARGET): build $(OBJECTS)
    ar rcs $@ $(OBJECTS)
    ranlib $@

build:
    @mkdir -p build
    @mkdir -p bin

标签: clinuxmakefile

解决方案


heapsort并且mergesort不是 C 中标准库的一部分。您应该查看 C++ 编译器以具有这些功能。


推荐阅读