外部未定义的符号

时间:2015-11-17 06:03:24

标签: c dll shared-libraries extern

我正在构建一个用户定义的shell,其中shell动态链接库

我从主文件中获得了以下代码片段,其中包含全局变量声明...

char *prompt = "upsh";
int main()
{ ...

然后我有一个共享库如下......

extern char *prompt;

int setprompt(char *argv[]) {
    prompt = argv[1];
    return 0;
}

我的问题是,当我从主程序链接库时,我收到错误

./setprompt.so: undefined symbol: prompt

......也许这是编译问题?

2 个答案:

答案 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)