kendall weihe
kendall weihe

Reputation: 73

Extern undefined symbol

I am building a user defined shell where the shell dynamically links libraries

I have the following snippet from the main file that contains the global variable declarations...

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

then I have a shared library as follows...

extern char *prompt;

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

my problem is that when I link the library from the main program I get the error

./setprompt.so: undefined symbol: prompt

...maybe this is a compilation issue?

Upvotes: 0

Views: 1135

Answers (2)

Harald
Harald

Reputation: 3180

As Naveem Kumar commented, you should provide compilation steps. Does the following reproduce what you meant? This worked in my laptop.

Makefile

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;
}

Upvotes: 1

Eugene Anisiutkin
Eugene Anisiutkin

Reputation: 140

I do not think it is a comilation issue. If i get it right, you have a console application, which means that argc and argv must be passed to the main function in order to use them, but they are not passed. I guess your problem is that you call int setprompt(char *argv[]) without actually passing argv[]. But i may be wrong, more code would help to tell for sure.

But probably instead of int main() there should be int main(int argc, char **argv)

Upvotes: 0

Related Questions