LINUX.ORG.RU

Комбинирование сишной либки и приложения на с++ при сборке для ARM

 , , ,


0

1

Здравствуйте. Имеется приложение на 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. линковщику дается либка созданная под арм разумеется, глюков при создании либки под арм небыло.


lib.a

Собери lib.so и поймай грабли в либе, поверь они есть. у меня так собиралась статик либа в котором половина *.o была arm eabi5, а половина просто arm. итого либа не линковалась вполне ожидаемо.

dhampire ★★★ ()

Из-за неправильного порядка компоновщик может выбрасывать не нужные с его точки зрения модули, так их символы не используются. Попробуй добавить в флаги -Wl,--no-as-needed.

i-rinat ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.