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

时间:2016-09-13 08:55:48

标签: c gcc ld

我在.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:表达式中引用的无法解析符号'funName'   symbolsfile.txt:2:表​​达式中引用的无法解析符号'expression2'   collect2.exe:错误:ld返回1退出状态

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

如果我将FunSym = funName更改为FunSym = garbage,则错误会更改为“ undefined 符号...”,因此我猜是找到了funName这个表达式。

更新

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

1 个答案:

答案 0 :(得分:1)

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

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

main.c是这样的:

gcc main.c -o main -lname