@alexey_abramov

Комбинирование сишной либки и приложения на с++ при сборке для ARM — почему не дружит ARM c extern c?

Здравствуйте. Имеется приложение на C++, который использует 1 сишную либку, с множеством сишных функций. Они разумеется описаны в заголовочниках. с помощью Extern «C»(если есть __cplusplus) Само по себе приложение - работа с множеством данных, ничего особо и замороченного в нем нет. Компилируем все это дело под x86 с помощью g++. Все работает так как и должно быть. Но это приложение должно быть залито на микроконтроллер iWave, соответственно требуется сборка под ARM. Используется компилятор arm-linux-gnueabihf-g++. Были вроде скачены и обновлены все пакеты на убунту, для сборки с помощью этого компилятора. Сама либка включена, варнингов нет, однако возникают ошибки во всех используемых extern функциях. Т.е. пишется:

/home/user/workspace/project/arm/lib.a(manager.o): In function `Agent_From': manager.c:(.text+0x69e): undefined reference to `Agent_Get' manager.c:(.text+0x6c4): undefined reference to `Agent_Get' manager.c:(.text+0x6ea): undefined reference to `Agent_Get' manager.c:(.text+0x710): undefined reference to `Agent_Get' manager.c:(.text+0x750): undefined reference to `Agent_Get'

Как быть и куда копать? Может кто-то сталкивался с похожей проблемой? В интернете видел что некоторые решали данную проблему с помощью "-fpermissive" однако так решить не удалось данную проблему. Какие-то дополнительные данные могу завтра предоставить. Со сборкой под винду проблем никаких, и работает как часы, с армом баг с либкой. p.s. линковщику дается либка созданная под арм разумеется, глюков при создании либки под арм небыло.
  • Вопрос задан
  • 439 просмотров
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Покажи полный лог сборки, для x86 и для ARM.
Ответ написан
Копать стоит в сторону документации к компилятору. Если мне не изменяет склероз, Extern «C» в нем не поддерживается.
Ответ написан
@jk_action
Разработчик С++ и JavaScript
undefined reference to `Agent_Get' говорит о том, что при сборке Вам не хватает именно библиотеки, в которой есть реализация этой функции. Приложите заголовочный файл, где описана эта функция, Makefile и полный лог сборки под ARM.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы