Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
Основной проект на С (linux), есть библиотека в исходниках на С++. Основной проект собирается gcc, библиотека - g++. Соответственно не пойму как мне подключить (начать использовать функции) библиотеки в основном проекте. Предполагаю надо сделать правильный makefile, т.е. правильные ключи у gcc, но не могу найти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 00:32 |
|
||
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
2 plr: Попробуйте использовать «extern "C"», примерно так: lib.cpp: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. lib.h: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. main.c: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 04:48 |
|
||
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
Попробую такую конструкцию, спасибо. А как бороться с проблемой компиляции основного проекта на Си, в котором подключаю заголовки из С++ отсутствие файлов библиотек, например, <list>, <cstddef>? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 11:24 |
|
||
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
plrОсновной проект на С (linux), есть библиотека в исходниках на С++. Основной проект собирается gcc, библиотека - g++. Соответственно не пойму как мне подключить (начать использовать функции) библиотеки в основном проекте. Если основной проект на С, собрать его с библиотекой на С++ не получится. С++ код может использовать код С-библиотек, а наоборот -- С -код использовать С++ библиотеки -- невозможно. Для того, чтобы С -код мог использовать С++ библиотеку, надо, чтобы в С++-ной библиотеке были бы интерфейсы (API) на чистом С. Это далеко не у всех библиотек есть. Если такого API нет -- можно теоретически сделать самому маленькую обертку. C++ кода маленькой адаптирующей С-библиотекой. Этот код должен быть написан на С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 11:44 |
|
||
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
MasterZiv, спасибо за объяснение. Пример обертки где можно посмотреть? Или Пётр Седов как раз его привёл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 11:49 |
|
||
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
Да, Пётр привёл примерную реализацию врапера для одного метода из С++ной библиотеки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 16:19 |
|
||
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
Прошу еще подсказать мне как лучше реализовать wrapper. Наверно в отдельных от библиотеки cpp и h -файлах? И как мне лучше построить makefile? gcc и/или g++? Я читал, что g++ это тот же gcc, только с определенными параметрами. Библиотеку собираю g++, а wrapper чем собирать? А основной проект собираю gcc, в нем подключаются заголовочные файлы wrapper, будет ли он собираться gcc? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 20:04 |
|
||
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
2 plr: plrПрошу еще подсказать мне как лучше реализовать wrapper.Например, у нас есть C++-библиотека, содержащая один класс Num_List: num_list.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. num_list.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. lib.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. wrappers.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. Пример использования (на чистом C): main.c Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. вывод на консоль Код: plaintext 1. 2. plrНаверно в отдельных от библиотеки cpp и h -файлах?Я разместил функции-обёртки в отдельном файле (wrappers.cpp), чтобы не захламлять код библиотеки. plrИ как мне лучше построить makefile? gcc и/или g++?Я на создание makefile-ов не заморачиваюсь. Я компилирую проект в Code::Blocks. Там у каждого файла есть свойства, одно из которых -- «compiler variable». Если оно установлено в «CPP» (по умолчанию), то файл компилируется как C++-код, а если в «CC» -- то как C-код. plrБиблиотеку собираю g++, а wrapper чем собирать?Функции-обёртки написаны на C++, поэтому файл wrappers.cpp надо компилировать как C++-код. plrА основной проект собираю gcc, в нем подключаются заголовочные файлы wrapper, будет ли он собираться gcc?Заголовочный файл lib.h, содержащий упоминания всех функций-обёрток, специально сделан так, что его можно спокойно #include-ать в C-шные исходники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2013, 07:08 |
|
||
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
plrНаверно в отдельных от библиотеки cpp и h -файлах? ДА, в отдельных лучше. Если библиотека не твоя. Если твоя, то можно и в тех же, зависит от библиотеки и многих прочих факторов. И как мне лучше построить makefile? Эт твоё дело... gcc и/или g++? Для компиляции библиотеки и врапера нужно использовать g++. Я читал, что g++ это тот же gcc, только с определенными параметрами. нет. Пока на твойм уровне понимания думай, что С компилируется GCC, С++ -- G++. Библиотеку собираю g++, а wrapper чем собирать? Им же. А основной проект собираю gcc, Да в нем подключаются заголовочные файлы wrapper, будет ли он собираться gcc? Да, будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2013, 13:02 |
|
||
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
Пётр СедовМы хотим, чтобы функциональность этого класса была доступна в C-коде. Для этого пишем функции-обёртки над каждым методом класса А если мне нужен класс посложнее, например, универсальный контейнер boost::multi_index, где все на шаблонах сделанно? Как к нему писать функции-обертки, чтобы универсальность не потерялась и можно было любые типы/индексы использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2013, 14:26 |
|
||
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
функции-обёрткиПётр СедовМы хотим, чтобы функциональность этого класса была доступна в C-коде. Для этого пишем функции-обёртки над каждым методом класса А если мне нужен класс посложнее, например, универсальный контейнер boost::multi_index, То пишешь C-API посложнее. функции-обёрткигде все на шаблонах сделанно? Код С++ на шаблонах ни в каком виде не может быть использован в С. Ты только можешь инстанциировать шаблон для одного или нескольких наборов его параметров и этот код использовать в C-API. Сложность этого API будет примерно сопоставима со сложностью интерфейса шаблонного класса или функции. Но так может работать тоже не любой код -- какие-нибудь стратегии уже не покатят. функции-обёрткиКак к нему писать функции-обертки, чтобы универсальность не потерялась и можно было любые типы/индексы использовать? Универсальность поретяется. С не имеет поддержки generic programming, и соответственно его там никак не использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2013, 16:05 |
|
||
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
MasterZivС не имеет поддержки generic programming, и соответственно его там никак не использовать. И что там используют тогда вместо boost::multi_index? Каждый раз наколенке с нуля пишут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2013, 00:00 |
|
||
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
multi_index, Разное, каждый свое. Есть универсальные библиотеки, есть частные. Нередко пишутся свои библиотеки. Что такое multi index не знаю, никогда не использовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2013, 22:42 |
|
||
|
использование C++ и С в одном проекте
|
|||
|---|---|---|---|
|
#18+
multi_indexMasterZivС не имеет поддержки generic programming, и соответственно его там никак не использовать. И что там используют тогда вместо boost::multi_index? Каждый раз наколенке с нуля пишут? Да. Не любят шаблоны - городят тонны кода или мучаются с громоздкими дефайнами. А если попробовать переписать код с вариадиками на чистый С, то получится полная жесть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2013, 22:57 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2020445]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 298ms |
| total: | 423ms |

| 0 / 0 |
