链接到共享对象时的未定义引用

时间:2013-01-28 14:21:09

标签: linux gcc shared-libraries undefined-reference

我是一个愚蠢的新手。

我有一个名为file.c的文件,其函数为my_putstr(char *)和my_strlen(char *)

my_putstr()使用write()(unistd.h)

写入参数

我想从file.c创建一个库,所以我做了:

gcc -fPIC -c file.c
gcc -shared -o libfile.so file.o

然后我创建了一个main.c文件并从中调用了my_putstr()。 我试图编译并链接我的.so

gcc -L. -lfile main.c -o test

但我得到了对my_putstr()

的未定义引用

我尝试在其中创建一个带有my_putstr()和my_strlen()的.h,并将其包含在main中但我得到了同样的错误。

抱歉愚蠢的问题。

Havaniceday。

1 个答案:

答案 0 :(得分:1)

你的问题缺乏信息,但我可以先建议你

gcc main.c ./libfile.so -Wl,-rpath . -o test

如果此操作失败,您的来源有问题。 如果此时一切正常,请尝试

gcc main.c -L . -lfile -Wl,-rpath . -o test

如果这将输出未定义的引用,那么你的lib路径中可能已经有了类似libfile.a的东西,而没有my_putstr(可能来自之前的实验)。

如果一切正常,那么你的链接器是明智的,可以订购哪些库提供给命令字符串,你必须记住,然后库总是在使用这个库的对象之后。