Название: приложение на C++ и библиотека на C (решено) Отправлено: theorist от Октябрь 12, 2010, 18:32 написал на C++ в Qt Creator программу, использующую две библиотеки, написанные на C++. проблем с этим нет.
теперь в программе нужно использовать библиотеку, написанную на C [http://sourceforge.net/projects/libcue/ (http://sourceforge.net/projects/libcue/)]. добавил в файл проекта: Код: LIBS += -lcue добавил в один из файлов заголовков: Код: extern "C" { и компилятор начинает выдавать ошибки, причём ругается на библиотеки, написанные на C++. видимо, я неправильно пытаюсь использовать библиотеку на C. подскажите, пожалуйста, как сделать правильно. Название: Re: приложение на C++ и библиотека на C Отправлено: Авварон от Октябрь 12, 2010, 20:21 Директива extern "C" делает немного не то, что вы думаете.
Для компилера нет разницы между с++ и си библиотеками. Кроме того, с++ обратно совместим с си - вы просто подключаете хедер/библиотеку не заботясь о том, на каком языке они написаны (с или с++) Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 12, 2010, 20:53 допустим, что так. я убрал extern, но ошибки всё равно выдаются те же. как быть?
Название: Re: приложение на C++ и библиотека на C Отправлено: Авварон от Октябрь 12, 2010, 22:53 Может вы хоть ошибки процитируете?
Название: Re: приложение на C++ и библиотека на C Отправлено: Alex Custov от Октябрь 12, 2010, 23:23 Директива extern "C" делает немного не то, что вы думаете. Для компилера нет разницы между с++ и си библиотеками. Для линкера есть, С имена заманглятся, и линкер их не найдёт. Поэтому C заголовки заворачивают в extern "C". А правильные авторы сишной библиотеки даже напишут в заголовке Код
Кроме того, с++ обратно совместим с си - вы просто подключаете хедер/библиотеку не заботясь о том, на каком языке они написаны (с или с++) не 100% совместим, плюс потому что см. выше. Автор - покажи ошибки. Кстати используй pkgconfig в .pro, так удобнее библиотеки добавлять в проект, и универсальнее. У меня, например, не libcue-1.3, а libcue-1.4: Код
Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 13, 2010, 07:29 ошибки:
Код: In file included from /usr/include/sys/stat.h:107, повторяю, если не пытаться использовать libcue, то эти ошибки не возникают. А правильные авторы сишной библиотеки даже напишут в заголовке Код
может быть, дело в том, что этого нет в cdtext.h? Название: Re: приложение на C++ и библиотека на C Отправлено: gogi от Октябрь 13, 2010, 10:27 ошибки: Код: In file included from /usr/include/sys/stat.h:107, повторяю, если не пытаться использовать libcue, то эти ошибки не возникают. А правильные авторы сишной библиотеки даже напишут в заголовке Код
может быть, дело в том, что этого нет в cdtext.h? Попробуй инклудануть <time.h> (только перед #include <cdtext.h>) Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 13, 2010, 10:50 Попробуй инклудануть <time.h> (только перед #include <cdtext.h>) не помоглоНазвание: Re: приложение на C++ и библиотека на C Отправлено: gogi от Октябрь 13, 2010, 11:47 Попробуй инклудануть <time.h> (только перед #include <cdtext.h>) не помоглоА ошибки изменились? Просто поле st_atim имеет тип который определён в time.h, а хидер bits/stat.h его сам не инклудит. Название: Re: приложение на C++ и библиотека на C Отправлено: gogi от Октябрь 13, 2010, 11:55 Посмотрел я этот cdtext.h(благо он маленький)
Там есть Код: typedef struct Cdtext Cdtext; Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 13, 2010, 11:58 А ошибки изменились? Просто поле st_atim имеет тип который определён в time.h, а хидер bits/stat.h его сам не инклудит. всё то же самоеНазвание: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 13, 2010, 12:05 Может тебе ещё чего подключить надо? может быть, но только что?Название: Re: приложение на C++ и библиотека на C Отправлено: gogi от Октябрь 13, 2010, 12:15 Может тебе ещё чего подключить надо? может быть, но только что?Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 13, 2010, 12:34 Ну не знаю, я с этой библиотекой не работал. Почитай на неё доку, погрепай где её исходники на Cdtext. у неё документации нет. перепробовал все файлы заголовков, где есть Cdtext. ничего не изменилось.Название: Re: приложение на C++ и библиотека на C Отправлено: Alex Custov от Октябрь 13, 2010, 14:56 у неё документации нет. перепробовал все файлы заголовков, где есть Cdtext. ничего не изменилось. Выкладывай самый маленький компилябельный пример Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 13, 2010, 15:09 Выкладывай самый маленький компилябельный пример с libcue? у меня так ничего и не получилось скомпилировать с его участием.Название: Re: приложение на C++ и библиотека на C Отправлено: gogi от Октябрь 13, 2010, 15:51 Выкладывай самый маленький компилябельный пример с libcue? у меня так ничего и не получилось скомпилировать с его участием.Попробуй helloworld слинковать с этой либой и повызывать из неё какие-либо функции. helloworld в данной случае если не понял - простой маленький файл .c(.cpp) с функцией main. Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 13, 2010, 16:10 Код: #project.pro Код: //main.cpp Название: Re: приложение на C++ и библиотека на C Отправлено: gogi от Октябрь 13, 2010, 16:16 Ну а теперь попробуй постепенно из helloworlda сделать свою программу, копируя куски кода и периодически проверяя компиляцию
Название: Re: приложение на C++ и библиотека на C Отправлено: Alex Custov от Октябрь 13, 2010, 19:45 Выкладывай самый маленький компилябельный пример с libcue? у меня так ничего и не получилось скомпилировать с его участием.Хотя бы самый маленький пример, который не компилируется. Там у тебя я вижу ещё CLucene используется. Название: Re: приложение на C++ и библиотека на C Отправлено: Авварон от Октябрь 13, 2010, 21:15 Порядок хедеров попробуй поменять.
Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 15, 2010, 07:51 Порядок хедеров попробуй поменять. не помоглоНазвание: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 15, 2010, 08:09 Хотя бы самый маленький пример, который не компилируется. Там у тебя я вижу ещё CLucene используется. Код: # project.pro Код: //main.cpp это уже не компилируется Название: Re: приложение на C++ и библиотека на C Отправлено: gogi от Октябрь 15, 2010, 10:24 это уже не компилируется INCLUDEPATH для CLucene.h добавил?Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 15, 2010, 10:30 INCLUDEPATH для CLucene.h добавил? это ни к чему, так как CLucene.h находится в /usr/includeНазвание: Re: приложение на C++ и библиотека на C Отправлено: Alex Custov от Октябрь 15, 2010, 15:16 Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 15, 2010, 15:51 покажи полный лог Код: Running build steps for project project... Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 15, 2010, 16:13 только что попробовал заменить CLucene на TagLib, и такой тандем прокатил. видимо, всё-таки проблема связана не с libcue, а с CLucene, причём она возникает, только если пытаешься использовать библиотеку на C.
Название: Re: приложение на C++ и библиотека на C Отправлено: Alex Custov от Октябрь 15, 2010, 18:45 только что попробовал заменить CLucene на TagLib, и такой тандем прокатил. видимо, всё-таки проблема связана не с libcue, а с CLucene, причём она возникает, только если пытаешься использовать библиотеку на C. CLucene каким-то образом запрещает объявление структуры timespec в time.h, поэтому поля st_atim и другие имеют неопределённый тип. Я не могу воспроизвести, у меня более новые версии билиотек и всё собирается. Что если перед включением CLucene.h добавить Код
Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 16, 2010, 07:14 Что если перед включением CLucene.h добавить Код
Код: Running build steps for project project... Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Октябрь 27, 2010, 17:59 попробовал на openSUSE 11.3 с clucene-0.9.21 и libcue-1.4. результат тот же.
Название: Re: приложение на C++ и библиотека на C Отправлено: theorist от Ноябрь 02, 2010, 09:16 ответ здесь: http://stackoverflow.com/questions/3952699/ (http://stackoverflow.com/questions/3952699/)
Название: Re: приложение на C++ и библиотека на C (решено) Отправлено: Alex Custov от Ноябрь 03, 2010, 17:52 я же говорил используй pkg-config, такой бы проблемы не возникло.
|