Здравствуйте!Столкнулся с проблемой:
Есть программулина, написанная на Си, которая использует функции одной .so библиотеки. Если в Code Blocks создаю проект типа "Консольное приложение" и выбираю используемый язык "С", то, после указания линкеру опции -lбиблиотека и путей, по которым нужно искать .h файлы, все запускается и работает как в режиме Debug, так и в режиме Release. Если же делаю то же самое, но язык реализации выбираю "С++", приложение не собирается. В режиме Debug выдает: "undefined reference to..." для каждой используемой библиотечной функции. В режиме Release при сборке выдает: "ld: can't find -lбиблиотека". Явно есть какаое-то отличие, состоящее в выборе языка реализации на этапе создания проекта, но я не знаю, в чем оно состоит. Подскажите, пожалуйста, в чем может быть проблема?
>[оверквотинг удален]
> Если в Code Blocks создаю проект типа "Консольное приложение" и выбираю
> используемый язык "С", то, после указания линкеру опции -lбиблиотека и путей,
> по которым нужно искать .h файлы, все запускается и работает как
> в режиме Debug, так и в режиме Release. Если же делаю
> то же самое, но язык реализации выбираю "С++", приложение не собирается.
> В режиме Debug выдает: "undefined reference to..." для каждой используемой библиотечной
> функции. В режиме Release при сборке выдает: "ld: can't find -lбиблиотека".
> Явно есть какаое-то отличие, состоящее в выборе языка реализации на этапе
> создания проекта, но я не знаю, в чем оно состоит. Подскажите,
> пожалуйста, в чем может быть проблема?А что за библиотека? Что конкретно указано в undefined reference?
>[оверквотинг удален]
>> используемый язык "С", то, после указания линкеру опции -lбиблиотека и путей,
>> по которым нужно искать .h файлы, все запускается и работает как
>> в режиме Debug, так и в режиме Release. Если же делаю
>> то же самое, но язык реализации выбираю "С++", приложение не собирается.
>> В режиме Debug выдает: "undefined reference to..." для каждой используемой библиотечной
>> функции. В режиме Release при сборке выдает: "ld: can't find -lбиблиотека".
>> Явно есть какаое-то отличие, состоящее в выборе языка реализации на этапе
>> создания проекта, но я не знаю, в чем оно состоит. Подскажите,
>> пожалуйста, в чем может быть проблема?
> А что за библиотека? Что конкретно указано в undefined reference?Библиотека содержит в себе API к модулю ядра, в котором реализован специфический протокол сетевого уровня.
Undefined reference to function_name. То есть, линкер не может разрешить ссылки на все используемые из библиотеки функции.
> Undefined reference to function_name. То есть, линкер не может разрешить ссылки на
> все используемые из библиотеки функции.Пальцем в небо:
#ifdef __cplusplus
extern "C" {
#endif
и
#ifdef __cplusplus
}
#endif
в заголовочных файлах есть?
>[оверквотинг удален]
> extern "C" {
> #endif
>
Нет, таких изысков нет =)
> Нет, таких изысков нет =)А должны быть, чтобы компилятор С++ понял, что используется С-шная библиотека, а не С++.
> пожалуйста, в чем может быть проблема?добавь -I "путь/поиска/include"
>> пожалуйста, в чем может быть проблема?
> добавь -I "путь/поиска/include"Не работает. В си проекте без этой опции все работало.
>>> пожалуйста, в чем может быть проблема?
>> добавь -I "путь/поиска/include"
> Не работает. В си проекте без этой опции все работало.С и С++ - ВНЕЗАПНО! - разные языки.
То что бибки они ненерят по разному - наверное тоже внезапно :)
Чтобы из С++ заюзать С бибку она должна быдь задекларирована как cdecl (extern "C") ...