ошибка компоновки для mergesort () из стандартной библиотеки C - PullRequest
0 голосов
/ 20 февраля 2019

Это мой исходный файл, но когда я его скомпилировал, я получил неопределенную ссылку на 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. Я использовал этот универсальный make-файл, но, похоже,сбой 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

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

mergesort() from the C standard library - в стандартной библиотеке C нет функции mergesort ().Функция не взята из стандартной библиотеки C .

Я обнаружил man mergesort на linux.die.net, что предполагает, что эта функция из систем BSD.Поэтому вы должны связать вашу программу с -lbsd.

. В вашем make-файле вы найдете:

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

Это должно быть сделано для всех хостов linux, на которых установлен пакет bsd.Уберите этот чек.

0 голосов
/ 20 февраля 2019

heapsort и mergesort не являются частью стандартной библиотеки на C. Вам следует взглянуть на компилятор C ++, чтобы иметь эти функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...