30/09/2018, 20:33

[C++] Lỗi Undefined symbols for architecture x86_64

Khi em build một code C++ trên OS X thì nó xuất hiện lỗi này ạ (cái ở cuối ấy ạ)


Đây là sourcode của em :

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "symbol_table.h"
#include "quick_sort.h"

int int_compare(void *x, void *y)
{
	int t1=*((int *)x);
	int t2=*((int *)y);
	if (t1==t2)
		return 0;
	else
		if (t1<t2)
			return -1;
	return 1;
}

int Entry_compare(void *x, void *y)
{
    Entry t1=*((Entry *)x);
    Entry t2=*((Entry *)y);
    if (t1.key == t2.key)
        return 0;
    else if (t1.key < t2.key)
        return -1;
    return 1;
}

int main()
{
	int i;
	SymbolTable *aSymbolTable = createSymbolTable(createEntry, int_compare);
	//SAI O DAY
	for (i=0; i<3; i++){
		addEntry(&i, strdup("abc"), aSymbolTable);
	}
        int n=2;
        char *s=(char *)((getEntry(&n, aSymbolTable))->value);       
        
        QuickSort(aSymbolTable->entry, 0, 2, sizeof(Entry), Entry_compare);
        
}

Đây là các thư viện, em cho vào cùng một thư mục với sourcecode

//quicksort.h

#ifndef QUICK_SORT_H
#define QUICK_SORT_H

void QuickSort(void *buf, int l, int h, int size, int (*compare)(void *, void *));

#endif

// quicksort.c
#include "quick_sort.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>

void QuickSort(void *buf, int l, int h, int size, int (*compare)(void *, void *))
{
	if (h-l<=0)
		return;
	int i=l, j=h, k=rand()%(h-l+1) + l;
	char *temp=(char *)malloc(size);
	do
	{
		while (compare((char *)buf+size*i, (char *)buf+size*k)) i++;
		while (!compare((char *)buf+size*j, (char *)buf+size*k)) j--;
		if (i<=j){
			memcpy(temp, (char *)buf+size*i, size);
			memcpy((char *)buf+size*i, (char *)buf+size*j,size);
			memcpy((char *)buf+size*j, temp, size);
			i++; j--;
		}
	} while (i<=j);
	QuickSort(buf, l, j, size, compare); 
	QuickSort(buf, i, h, size, compare);
}

//symbol_table.h
#ifndef SYMBOL_TABLE_H
#define SYMBOL_TABLE_H

#define INTIAL_SIZE 10
#define INCREMENTAL_SIZE 10
#define SIZE_OF_KEY sizeof(int)
#define SIZE_OF_VALUE 30

typedef struct {
	void *key;
	void *value;
} Entry;
typedef struct {
	Entry *entry;
	int total;
	int size;
	Entry (*makeNode)(void *, void *);
	int (*compare)(void *, void *);
} SymbolTable;


Entry createEntry(void *, void *); //Tao mot Entry tu du lieu vao

//Khoi tao mot Symbol Table
SymbolTable * createSymbolTable(Entry (*)(void *, void *), int (*)(void *, void *));

//Xoa mot Symbol Table
void dropSymbolTable(SymbolTable *);

//Them mot Entry vao Symbol Table
int addEntry(void *, void *, SymbolTable *);

Entry * getEntry(void *key, const SymbolTable *aSymbolTable); //return Entry

#endif
viết 22:37 ngày 30/09/2018

em phải compile cả 2 file quick_sort.c và phonebook.c nữa (nếu phonebook.c là file chứa các implementation cho các hàm trong symbol_table.h)

gcc demo.c phonebook.c quick_sort.c -o demo

Phạm Văn Hoàng viết 22:34 ngày 30/09/2018

Em cảm ơn ạ.

Bài liên quan
0