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
Bài liên quan
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
Em cảm ơn ạ.