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

void *funName()
{
    //implementation
}

并编译到库(libname.so)。
我正在编译另一个使用此函数的.c文件(main.c),并在命令行中设置符号名:
gcc -Wl,--just-symbols=symbolsfile.txt main.c -o main -lname

符号文件.txt:
funsym=funname;
symbol2=表达式2;

但是我得到了这个链接错误:
txt:1:表达式中引用的不可解析符号“funname”
txt:2:表达式中引用的无法解析的符号“expression2”
Cuxe2.EXE:错误:LD返回1退出状态
我试图在funcs.c中添加一个函数声明(我没有相应的.h文件),但它没有改变任何东西。
如果我将FunSym = funName更改为FunSym = garbage,则错误将更改为“Undefined Symbol…”,因此我猜表达式funName已找到。
更新:
我尝试在main.c的顶部添加extern void *funName();,或者按照注释中的建议添加到单独的头文件中,但是没有解决问题(同样的错误)。是否需要在编译--just-symbols或编译/链接库(libname.so)时添加标志main.c

最佳答案

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

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

像这样:
gcc main.c -o main -lname

08-27 13:34