我正在构建一个用户定义的shell,其中shell动态链接库
我从主文件中获得了以下代码片段,其中包含全局变量声明...
char *prompt = "upsh";
int main()
{ ...
然后我有一个共享库如下......
extern char *prompt;
int setprompt(char *argv[]) {
prompt = argv[1];
return 0;
}
我的问题是,当我从主程序链接库时,我收到错误
./setprompt.so: undefined symbol: prompt
......也许这是编译问题?
答案 0 :(得分:1)
正如Naveem Kumar评论的那样,你应该提供编译步骤。以下是否重现您的意思?这适用于我的笔记本电脑。
<强>生成文件强>
all: main
libsetprompt.so: setprompt.c
gcc -fPIC -DPIC -shared setprompt.c -o libsetprompt.so
main: main.c libsetprompt.so
gcc main.c -o main -L. -lsetprompt
clean:
rm main libsetprompt.so
<强>的main.c 强>
char *prompt = "upsh";
int main(int argc, char *argv[])
{ return 0; }
<强> setprompt.c 强>
extern char *prompt;
int setprompt(char *argv[])
{
prompt = argv[1];
return 0;
}
答案 1 :(得分:0)
我不认为这是一个漫画问题。如果我做对了,你有一个控制台应用程序,这意味着必须将argc和argv传递给main函数才能使用它们,但它们不会被传递。我想你的问题是你在没有实际传递argv []的情况下调用int setprompt(char *argv[])
。但我可能错了,更多代码肯定会有所帮助。
但可能代替int main()
应该有int main(int argc, char **argv)