Есть библиотека, например libA.a, в которой определяется константа, например const int c=10;
которая объявляется в заголовке С.h как extern int c;
Есть заголовок M.h, который объявляет шаблон класса M, использующий константу с.
Далее, есть вторая библиотека, пусть libB.a, в которой используется класс M, и, соответственно, с.
Т.о. если я в своей программе использую заголовок M.h и библиотеку libB, я должен линковать обе библиотеки — libA и libB:
библиотеку libA для определения с, а libB для необходимой функциональности. При этом в libB константа с должна определяться посредством libA.
Вопрос: в каких случаях это не происходит? т.е. из libB не видно с, определенную в libA?
у меня выдает ошибку undefined reference.
компилятор g++ 3.4.4 под cywwin.
Здравствуйте, sega__, Вы писали:
__>Привет. __>не могу решить такую проблему:
__>Есть библиотека, например libA.a, в которой определяется константа, например const int c=10; __>которая объявляется в заголовке С.h как extern int c;
а почему объявление с определением не в одном месте — c.h?
Здравствуйте, sega__, Вы писали:
__>Привет. __>не могу решить такую проблему:
__>Есть библиотека, например libA.a, в которой определяется константа, например const int c=10; __>которая объявляется в заголовке С.h как extern int c; __>Есть заголовок M.h, который объявляет шаблон класса M, использующий константу с. __>Далее, есть вторая библиотека, пусть libB.a, в которой используется класс M, и, соответственно, с. __>Т.о. если я в своей программе использую заголовок M.h и библиотеку libB, я должен линковать обе библиотеки — libA и libB: __>библиотеку libA для определения с, а libB для необходимой функциональности. При этом в libB константа с должна определяться посредством libA. __>Вопрос: в каких случаях это не происходит? т.е. из libB не видно с, определенную в libA? __>у меня выдает ошибку undefined reference. __>компилятор g++ 3.4.4 под cywwin.
Константы по умолчанию имеют внутренне связываение... То есть по умочанию видна тока в том модуле, в котором определена...
Чтоб сделать константу видимой в других модулях, надо:
// модуль Аextern const int a = 10;
// модуль Вextern const int a;
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, sega__, Вы писали:
__>линкуется это с -lA -lB __>пишет, что undefined reference in ClassB.cpp on GREEN...
Порядок линковки статических библиотек имеет значение. Т.к. libB зависит от libA, линковать надо -lB -lA.