The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"компиляция библиотеки в gcc"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"компиляция библиотеки в gcc" 
Сообщение от Валерий Искать по авторуВ закладки(??) on 01-Дек-05, 18:40  (MSK)
Ребят, (ой, и девчат :)) помогите пожалуйста. Решил свою достаточно большую программулину написанную в виндах и естественно в визуал С++ портировать на линукс. Программу заранее писал максимально кроссплатформенную. К ней написано много всяких вспомогательных библиотек. Конечно уверен что еще возникнет не мало проблем с портацией, но первая проблема возникла с библиотеками. Допустим я имею искодник mylib.cpp. Как из него с помощью gcc или g++ сделать не объектный файл а либу? Допустим mylib.a? Либа должна быть статической. Извините еще раз за этот тупой вопрос, но в юниксах я пока еще детеныш. Как ни крутил ни ветрел этот gcc, так библиотеку произвести на свет и не смог. Да, и еще, как мне потом эту либу подключить к проекту?

Заранее благодарен за все ответы.

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]

1. "компиляция библиотеки в gcc" 
Сообщение от Hordi emailИскать по авторуВ закладки on 01-Дек-05, 21:35  (MSK)
статическая библиотека - это всего-лишь архив объектных файлов.
собирается командой:

ar -cr mylib.a file1.o file2.o file3.o ...

*.cpp файлы компиляй с опцией -fpic

подключать статическую библиотеку как и обычный объектный файл.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "компиляция библиотеки в gcc" 
Сообщение от Валерий Искать по авторуВ закладки(??) on 02-Дек-05, 15:04  (MSK)
>статическая библиотека - это всего-лишь архив объектных файлов.
>собирается командой:
>
>ar -cr mylib.a file1.o file2.o file3.o ...
>
>*.cpp файлы компиляй с опцией -fpic
>
>подключать статическую библиотеку как и обычный объектный файл.

А вот за это спасибо, все коротко и ясно

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "компиляция библиотеки в gcc" 
Сообщение от dimus Искать по авторуВ закладки(??) on 02-Дек-05, 09:51  (MSK)
Если у вас все либы в исходниках - то зачем вообще превращать их в либы? Пропишите в Makefile эти исходники и все пучком будет.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "компиляция библиотеки в gcc" 
Сообщение от Hordi emailИскать по авторуВ закладки on 02-Дек-05, 10:17  (MSK)
>Если у вас все либы в исходниках - то зачем вообще превращать
>их в либы?
А может одну либу разные проекты юзают...

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "компиляция библиотеки в gcc" 
Сообщение от Валерий Искать по авторуВ закладки(??) on 02-Дек-05, 14:30  (MSK)
>Если у вас все либы в исходниках - то зачем вообще превращать
>их в либы? Пропишите в Makefile эти исходники и все пучком
>будет.
На сколько я понимаю, объектный файл подключается к проекту целиком, а из либы берутся только те ф-ции и классы, которые используются в проекте. Этим они и отличаются (либы от объектников). Например, когда ты подключаешь какую нить стандартную библиотеку, из нее компилится только те классы (а может даже только методы) и ф-ции, которые ты вызываешь. (Ну, естественно, и те, которые они сами внутри себя вызывают). Вот только поэтому я и хочу делать все с помощью библиотек, потому что там у меня куча всяких ф-ций, которые в данном проекте не используются, ну а в других - может и понадобятся.

Если я не прав, пожалуйста разубедите меня.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "компиляция библиотеки в gcc" 
Сообщение от Hordi emailИскать по авторуВ закладки on 05-Дек-05, 12:07  (MSK)
Статическая либа войдет в твой проект вся :)
Используй динамические библиотеки, если один код во многих проектах повторяется.

Опережая встречный вопрос...
Динамическая библиотека собирается так:

gcc -shared -fpic -o libmylib.so file1.o file2.o ...

Подключаешь к проекту как -lmylib

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "компиляция библиотеки в gcc" 
Сообщение от Валерий Искать по авторуВ закладки(??) on 06-Дек-05, 14:13  (MSK)
Сенькю вери мач всем. Все уже заработало в линух, причем достаточно быстро. Сам не ожидал. Нашел интересную деталь в различии компиляторов айкрософта (Visual C++ 6.0) и gcc (3.4.2). Может кто не знает. Если в цикле for в скобочках объявить любую переменную, то область ее видимости в gcc будет простираться до завершения цикла for, а в visual до следующей фигурной скобки. Например:

gcc - правильно, visual c++ - ошибка

for (std::list<int>::iterator i(mylist.begin()); i != mylist.end(); ++i){
...
}

for (std::list<int>::iterator i(mylist.begin()); i != mylist.end(); ++i){
...
}

в визуале надо писать, например так:

for (std::list<int>::iterator i(mylist.begin()); i != mylist.end(); ++i){
...
}

for (i = mylist.begin(); i != mylist.end(); ++i){
...
}

или так

{for (std::list<int>::iterator i(mylist.begin()); i != mylist.end(); ++i){
...
}}

{for (std::list<int>::iterator i(mylist.begin()); i != mylist.end(); ++i){
...
}}

не слабый баг

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "компиляция библиотеки в gcc" 
Сообщение от jd Искать по авторуВ закладки(??) on 06-Дек-05, 21:53  (MSK)
>Нашел интересную деталь в различии компиляторов айкрософта (Visual
>C++ 6.0) и gcc (3.4.2). Может кто не знает. Если в
>цикле for в скобочках объявить любую переменную, то область ее видимости
>в gcc будет простираться до завершения цикла for, а в visual
>до следующей фигурной скобки.

По стандарту C++ (ISO/IEC 14882) должно быть как в gcc. MSVC 6.0 делался вроде ещё до выхода этого стандарта (первый вариант - 1998 год), думаю дело в этом. Так что это не совсем ошибка.

Пример ваш не совсем понял, но в вижуале область видимости переменной, объявленной в заголовке цикла распространяется на блок, В КОТОРОМ находится этот цикл. То есть, как бы она объявлена непосредственно перед циклом (если по стандарту). Если память не изменяет.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "компиляция библиотеки в gcc" 
Сообщение от jd Искать по авторуВ закладки(??) on 06-Дек-05, 21:57  (MSK)
а, понял пример - просто невнимательно посмотрел в первый раз...
это как раз подтверждает то, что я сказал
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "компиляция библиотеки в gcc" 
Сообщение от chip emailИскать по авторуВ закладки(ok) on 13-Дек-05, 00:35  (MSK)
>Сенькю вери мач всем. Все уже заработало в линух, причем достаточно быстро.
>Сам не ожидал. Нашел интересную деталь в различии компиляторов айкрософта (Visual
>C++ 6.0) и gcc (3.4.2). Может кто не знает. Если в
>цикле for в скобочках объявить любую переменную, то область ее видимости
>в gcc будет простираться до завершения цикла for, а в visual
>до следующей фигурной скобки. Например:
>
>gcc - правильно, visual c++ - ошибка

Можно использовать ключ для VC++: /Zc:forScope ,- в этом случае поведение компилятора аналогично gcc (стандарту). В VC 2005 он включен по умолчанию.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру