表达式中引用了无法解析的符号 'name'

unresolvable symbol 'name' referenced in expression

我在 .c 文件中定义了一个函数(比如 funcs.c):

void *funName()
{
    //implementation
}

并编译成库 (libname.so)。

我正在编译另一个使用此函数的 .c 文件 (main.c),我在命令行中设置符号名称:

gcc -Wl,--just-symbols=symbolsfile.txt main.c -o main -lname

symbolsfile.txt:

FunSym = funName;
Symbol2 = expression2;
...

但我收到此链接错误:

symbolsfile.txt:1: unresolvable symbol 'funName' referenced in expression
symbolsfile.txt:2: unresolvable symbol 'expression2' referenced in expression
collect2.exe: error: ld returned 1 exit status

我尝试在funcs.c中添加一个函数声明(我没有相应的.h文件),但它并没有改变东西。

如果我将 FunSym = funName 更改为 FunSym = garbage,错误将更改为“undefined symbol...”,所以我猜测表达式 funName 被发现。

更新:

我尝试在 main.c 的顶部或评论中建议的单独的头文件中添加 extern void *funName();,但没有解决问题(同样的错误)。编译main.c或compiling/linking库(libname.so)是否需要添加标志--just-symbols

将标志 --just-symbols 从编译 main.c 移动到链接库。所以像这样编译库:

gcc -g -Wl,--just-symbols=symbolsfile.txt -shared -o libname.so *.o

main.c像这样:

gcc main.c -o main -lname