URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9558
[ Назад ]

Исходное сообщение
"проблема сборки программы в Code::Blocks"

Отправлено goodfornothing , 04-Окт-12 17:10 
Здравствуйте!

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


Содержание

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

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


"проблема сборки программы в Code::Blocks"
Отправлено goodfornothing , 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. То есть, линкер не может разрешить ссылки на все используемые из библиотеки функции.


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

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


#ifdef __cplusplus
extern "C" {
#endif

и

#ifdef __cplusplus
}
#endif

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

"проблема сборки программы в Code::Blocks"
Отправлено goodfornothing , 05-Окт-12 18:49 
>[оверквотинг удален]
> extern "C" {
> #endif
>

> и
>
 
> #ifdef __cplusplus
> }
> #endif
>

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

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


"проблема сборки программы в Code::Blocks"
Отправлено JohnProfic , 05-Окт-12 22:43 
> Нет, таких изысков нет =)

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


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

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


"проблема сборки программы в Code::Blocks"
Отправлено goodfornothing , 05-Окт-12 13:01 
>> пожалуйста, в чем может быть проблема?
> добавь -I "путь/поиска/include"

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


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

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