我在.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
?
答案 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