C 不可解符号';名称';在表达式中引用

C 不可解符号';名称';在表达式中引用,c,gcc,ld,C,Gcc,Ld,我在.c文件中定义了一个函数(比如funcs.c): 并编译到库中(libname.so) 我正在编译另一个使用此函数的.c文件(main.c),并在命令行中设置符号名称: gcc -Wl,--just-symbols=symbolsfile.txt main.c -o main -lname symbolsfile.txt: void *funName() { //implementation } FunSym=funName Symbol2=表达式2 但我得到了这个链接错误:

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

并编译到库中(
libname.so

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

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

void *funName()
{
    //implementation
}
FunSym=funName
Symbol2=表达式2

但我得到了这个链接错误:

symbolsfile.txt:1:表达式中引用的不可解析符号“funName”
symbolsfile.txt:2:表达式中引用的不可解析符号“expression2”
collect2.exe:错误:ld返回了1个退出状态

我尝试在funcs.c中添加函数声明(我没有相应的
.h
文件),但没有任何改变

如果我将
FunSym=funName
更改为
FunSym=garbage
,错误将更改为“undefined symbol…”,因此我猜会找到表达式
funName

更新:

我尝试添加
extern void*funName()
位于main.c的顶部,或在注释中建议的单独头文件中,但它没有解决问题(相同的错误)。是否需要在编译
main.c
或编译/链接库(libname.so)时添加标志
--仅符号?

将标志
--仅符号
从编译
main.c
移动到链接库。因此,请按如下方式编译库:

gcc -g -Wl,--just-symbols=symbolsfile.txt -shared -o libname.so *.o
gcc main.c -o main -lname
main.c
如下所示:

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

您是否有一个带有共享库接口的头文件?库是否可访问:可能您必须添加一个
-L
选项?
-lname。因此
-->
-lname@LPs是的,这是文章中的一个拼写错误(现已修复)。实际上我写的是
-lname
。是的,它是可以到达的。(我有一个
-L
)好的:您是否提供了至少带有
extern void*funName(void)的头文件否。我应该要一个吗?