The OpenNET Project / Index page

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

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

"проблема сборки программы в Code::Blocks"  +/
Сообщение от goodfornothing email(ok) on 04-Окт-12, 17:10 
Здравствуйте!

Столкнулся с проблемой:
Есть программулина, написанная на Си, которая использует функции одной .so библиотеки. Если в Code Blocks создаю проект типа "Консольное приложение" и выбираю используемый язык "С", то, после указания линкеру опции -lбиблиотека и путей, по которым нужно искать .h файлы, все запускается и работает как в режиме Debug, так и в режиме Release. Если же делаю то же самое, но язык реализации выбираю "С++", приложение не собирается. В режиме Debug выдает: "undefined reference to..." для каждой используемой библиотечной функции. В режиме Release при сборке выдает: "ld: can't find -lбиблиотека". Явно есть какаое-то отличие, состоящее в выборе языка реализации на этапе создания проекта, но я не знаю, в чем оно состоит. Подскажите, пожалуйста, в чем может быть проблема?

Ответить | Правка | Cообщить модератору

Оглавление

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


1. "проблема сборки программы в Code::Blocks"  +/
Сообщение от Anonim (??) on 04-Окт-12, 21:33 
>[оверквотинг удален]
> Если в Code Blocks создаю проект типа "Консольное приложение" и выбираю
> используемый язык "С", то, после указания линкеру опции -lбиблиотека и путей,
> по которым нужно искать .h файлы, все запускается и работает как
> в режиме Debug, так и в режиме Release. Если же делаю
> то же самое, но язык реализации выбираю "С++", приложение не собирается.
> В режиме Debug выдает: "undefined reference to..." для каждой используемой библиотечной
> функции. В режиме Release при сборке выдает: "ld: can't find -lбиблиотека".
> Явно есть какаое-то отличие, состоящее в выборе языка реализации на этапе
> создания проекта, но я не знаю, в чем оно состоит. Подскажите,
> пожалуйста, в чем может быть проблема?

А что за библиотека? Что конкретно указано в undefined reference?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "проблема сборки программы в Code::Blocks"  +/
Сообщение от goodfornothing email(ok) on 05-Окт-12, 09:57 
>[оверквотинг удален]
>> используемый язык "С", то, после указания линкеру опции -lбиблиотека и путей,
>> по которым нужно искать .h файлы, все запускается и работает как
>> в режиме Debug, так и в режиме Release. Если же делаю
>> то же самое, но язык реализации выбираю "С++", приложение не собирается.
>> В режиме Debug выдает: "undefined reference to..." для каждой используемой библиотечной
>> функции. В режиме Release при сборке выдает: "ld: can't find -lбиблиотека".
>> Явно есть какаое-то отличие, состоящее в выборе языка реализации на этапе
>> создания проекта, но я не знаю, в чем оно состоит. Подскажите,
>> пожалуйста, в чем может быть проблема?
> А что за библиотека? Что конкретно указано в undefined reference?

Библиотека содержит в себе API к модулю ядра, в котором реализован специфический протокол сетевого уровня.

Undefined reference to function_name. То есть, линкер не может разрешить ссылки на все используемые из библиотеки функции.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

5. "проблема сборки программы в Code::Blocks"  +/
Сообщение от JohnProfic (ok) on 05-Окт-12, 16:47 
> Undefined reference to function_name. То есть, линкер не может разрешить ссылки на
> все используемые из библиотеки функции.

Пальцем в небо:


#ifdef __cplusplus
extern "C" {
#endif

и

#ifdef __cplusplus
}
#endif

в заголовочных файлах есть?
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

6. "проблема сборки программы в Code::Blocks"  +/
Сообщение от goodfornothing email(ok) on 05-Окт-12, 18:49 
>[оверквотинг удален]
> extern "C" {
> #endif
>
> и
>
 
> #ifdef __cplusplus
> }
> #endif
>

> в заголовочных файлах есть?

Нет, таких изысков нет =)

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "проблема сборки программы в Code::Blocks"  +/
Сообщение от JohnProfic (ok) on 05-Окт-12, 22:43 
> Нет, таких изысков нет =)

А должны быть, чтобы компилятор С++ понял, что используется С-шная библиотека, а не С++.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

3. "проблема сборки программы в Code::Blocks"  +/
Сообщение от Anonymous123 on 05-Окт-12, 11:04 
> пожалуйста, в чем может быть проблема?

добавь -I "путь/поиска/include"

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "проблема сборки программы в Code::Blocks"  +/
Сообщение от goodfornothing email(ok) on 05-Окт-12, 13:01 
>> пожалуйста, в чем может быть проблема?
> добавь -I "путь/поиска/include"

Не работает. В си проекте без этой опции все работало.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

8. "проблема сборки программы в Code::Blocks"  +/
Сообщение от Аноним (??) on 06-Окт-12, 22:38 
>>> пожалуйста, в чем может быть проблема?
>> добавь -I "путь/поиска/include"
> Не работает. В си проекте без этой опции все работало.

С и С++ - ВНЕЗАПНО! - разные языки.
То что бибки они ненерят по разному - наверное тоже внезапно :)
Чтобы из С++ заюзать С бибку она должна быдь задекларирована как cdecl (extern "C") ...

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

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

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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