链接共享对象时未定义的对“test”的引用

时间:2012-11-26 04:41:21

标签: c linker makefile shared-libraries

我正在学习如何在C

中链接共享对象的教程

这是我的make文件

test: glenn.c libhala.so
    gcc glenn.c -L. -o test

libhala.so: hala.o
    gcc -shared hala.o -o libhala.so

hala.o: hala.c hala.h
    gcc -c -Wall -Werror -fpic hala.c

clean:
    rm *.o
    rm *.so
    rm test

hala.h

#ifndef HALA
#define HALA

extern void test(char*);
#endif

hala.c

#include "hala.h"
#include <stdio.h>

extern void test(char* s)
{

    printf("%s", s);
}

glenn.c

#include <stdio.h>
#include "hala.h"

int main()
{
    test("Hello There!");
    return 0;
}

这让我感到高兴。请帮帮我..

2 个答案:

答案 0 :(得分:2)

链接-lhaha时,您应添加glenn.c

gcc glenn.c -L. -lhala -o test

答案 1 :(得分:1)

在编译-lhala时添加glenn.c,因此请将makefile更新为

test: glenn.c libhala.so
    gcc glenn.c -L. -lhala -o test