1

我是一个愚蠢的新手。

我有一个名为 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 中,但我遇到了同样的错误。

很抱歉提出愚蠢的问题。

假期。

4

1 回答 1

1

您的问题缺乏信息,但我可以建议您首先尝试

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

如果这会失败,那么您的来源有问题。如果此时一切正常,请尝试

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

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

如果一切正常,那么您的链接器对提供给命令字符串的库的顺序是明智的,并且您必须记住,库总是在使用该库的对象之后。

于 2013-01-29T07:18:44.830 回答