ld не видит static символы - что делать?

Модератор: Модераторы разделов

Ответить
adav84
Сообщения: 41

ld не видит static символы - что делать?

Сообщение adav84 »

y.c:

Код: Выделить всё

static char *p[]={"abc","def"};



x.c:

Код: Выделить всё

#include <stdio.h>
extern char *p[];
int main(){
  printf("%s\n%s\n", p[0], p[1]);
  return 0;
}


пробую скомпилить:

Код: Выделить всё

[adav@localhost test]$ gcc y.c x.c
/tmp/ccXlJFzX.o: In function `main':
x.c:(.text+0xb): undefined reference to `p'
x.c:(.text+0x11): undefined reference to `p'
collect2: ld returned 1 exit status
[adav@localhost test]$


если убираю static в первом файле, все работает. но этот символ должен быть static, это от меня не зависит!

Римляне, сограждане, друзья! ЧЯДНТ?

Спасибо сказали:
adav84
Сообщения: 41

Re: ld не видит static символы - что делать?

Сообщение adav84 »

Код: Выделить всё

[adav@localhost test]$ gcc -c x.c y.c
[adav@localhost test]$ nm x.o y.o

x.o:
00000000 T main
         U p
         U printf

y.o:
00000000 d p


???
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: ld не видит static символы - что делать?

Сообщение /dev/random »

Ключевое слово static, указанное вне функции, означает "невидимый извне".
Спасибо сказали:
adav84
Сообщения: 41

Re: ld не видит static символы - что делать?

Сообщение adav84 »

хм-м, надо же. ну что-ж, невидимый, так невидимый (я уж думал, у меня руки кривые.... но раз так должно быть.....)

z.c:

Код: Выделить всё

#include "y.c"
char **pp=p;


x.c:

Код: Выделить всё

#include <stdio.h>
extern char **pp;
int main(){
  printf("%s\n%s\n", pp[0], pp[1]);
  return 0;
}


Код: Выделить всё

[adav@localhost test]$ gcc x.c z.c
[adav@localhost test]$ ./a.out
abc
def
[adav@localhost test]$


upd.: хотя не уверен насчет "чистоты".... (совместимы ли указатели на объекты с разными storage class'ами..... но -Wall молчит)
Спасибо сказали:
Ответить