我在.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