Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > линковка шаровой лайбы


Автор: GrayCardinal 23.5.2008, 15:11
Суть трабла. Собираю шаровую лайбу из кучи мелких статических лайб ("*.a"). В результате получаю _пустую_ шаровую лайбу. Как можно это исправить ?
Пробовал
$ g++ *.a -shared -o libgclib2.so
и
$ g++ -l<lib1> -l<lib2> etc.

Автор: MAKCim 23.5.2008, 16:35
банально, но действенно
Код

# ar x <archive>
# gcc -fpic -shared *.o -o lib<library>.so


ps. сам не понимаю, почему .a не распознается GCC  smile 

Автор: GrayCardinal 24.5.2008, 11:19
MAKCim, 
Так и сделал. smile

Автор: xvr 26.5.2008, 12:28
Цитата(GrayCardinal @ 23.5.2008,  15:11)
Суть трабла. Собираю шаровую лайбу из кучи мелких статических лайб ("*.a"). В результате получаю _пустую_ шаровую лайбу. Как можно это исправить ?
Пробовал
$ g++ *.a -shared -o libgclib2.so
и
$ g++ -l<lib1> -l<lib2> etc.

Из статических либ (*.a) в выходной модуль (как исполняемый, так и so) включаются ТОЛЬКО модули, содержащие public определения неразрешенных к данному моменту внешних символов. Неразрешенные внешние символы могут появится только в результате линковки *.o или включенных из *.a модулей. Так как никаких *.o не подавалось, то неразрешенных символов не было, и никакие модули из *.a включены не были, и ничего в выходной .so не попало.

Автор: GrayCardinal 26.5.2008, 13:55
xvr, 
И чего делать ? Создавать файло в котором используются ВСЕ функции и включать в лайбу ?  smile  
LOL

Автор: xvr 26.5.2008, 14:13
Цитата(GrayCardinal @ 26.5.2008,  13:55)
xvr, 
И чего делать ? Создавать файло в котором используются ВСЕ функции и включать в лайбу ?  smile  
LOL

Это конечно поможет, но несколько через край  smile Можно рассыпать .a файлы на объектники и слинковать их, а можно просто поставить линкеру опцию --whole-archive  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)