Статическая C библиотека в С++, Реально? |
Здравствуйте, гость ( Вход | Регистрация )
Статическая C библиотека в С++, Реально? |
AD |
21.3.2014, 19:51
Сообщение
#11
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Тогда проверяй, как манглятся имена экспортируемых/импортируемых функций. Мне доводилось сталкиваться с тем, что C-компилятор вставлял имя name, в то время как C++-компилятор вставлял (и, естессно, искал при импорте) для той же самой функции имя _name. А как это проверить, подскажешь? Mangle - искажаться... от этого слова слово манглятся???? |
|
|
Iron Bug |
22.3.2014, 10:48
Сообщение
#12
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Мне доводилось сталкиваться с тем, что C-компилятор вставлял имя name, в то время как C++-компилятор вставлял (и, естессно, искал при импорте) для той же самой функции имя _name. обычно такое бывает только в венде, при сборке разными компиляторами. например, при попытках скрестить MinGW и MSVC. для таких проблем существуют специальные утилиты, которые выкусывают это подчёркивание из библиотек. сейчас уже не помню, как называются, ибо давно уже не работаю с вендой. ещё такая проблема возникает в MSVC, если битности библиотек не совпадают. подчёркивание - это 32-битный MSVC. 64-битные библиотеки не имеют подчёркивания в экспорте. если же всё собирать одним компилятором и с одинаковой битностью, то проблем возникать не должно. под никсами я с таким не сталкивалась, там все более-менее современные компиляторы совместимы по генерируемым именам функций. возможно, С-библиотека импортирует какие-то функции. тогда они тоже должны вызываться с порядком передачи параметров типа "C". то есть, надо extern "C" ставить на всё, что она импортирует. посмотрела внимательно код библиотеки. там стоит
так вот, если ты это собираешь разными (C и C++) компияторами, то никакого ifdef там быть не должно. просто extern "C". иначе С++ компилятор это компилит по своим правилам и ищет не те функции. |
|
|
AD |
27.3.2014, 20:42
Сообщение
#13
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
так вот, если ты это собираешь разными (C и C++) компияторами, то никакого ifdef там быть не должно. просто extern "C". иначе С++ компилятор это компилит по своим правилам и ищет не те функции. Ну это вообще не компилябельно стало. Ошибки компиляции жуткие... Короче, вопрос решился. То ли я забыл при пересборке библиотеки помимо самих библиотек в саму тестовую программку подсунуть новый хедерник, то ли еще что-то... но после полной пересборки и замены - все заработало. Т.е. для полного счастья строчек: и в конце закрывающая скобка в заголовочном файле библиотеки вполне хватает!
|
|
|
Iron Bug |
27.3.2014, 21:41
Сообщение
#14
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
ну вот! о чём я, собственно, и говорила в самом начале темы. магии-то никакой нет
|
|
|
Текстовая версия | Сейчас: 23.4.2024, 19:48 |