LINUX.ORG.RU

Сообщения alAb

 

Небольшой вопрос по си и GCC - malloc для структуры с указателями

Здравствуйте. Имеется структура на языке Си.

typedef struct {
	int * oneNumber;
	int * twoNumber;
} twoNumbers;
В коде пишем
twoNumbers * tnTestPointer;
И разумеется выделяем память
tnTestPointer = malloc( sizeof( twoNumbers ) );
Вопрос - на каком основании компилятор GCC после выполнения malloc для структуры определяет 2 указателя на внутренние числа в 1 адрес памяти?(на примере 0xbaadf00d).

Понимаю что в дальнейшем нужно делать 2 malloc для oneNumber и twoNumber. Но мне интересна логика его работы, если структура представляет внутри себя одни лишь указатели. Просто до маллока у нас находится какой-то мусор в указателях(что совершенно правильно, ведь мы создали переменную со значением указателя на память, но не выделели память), после же маллока - идет еще выставка одинакового значения для внутренних элементов. Т.е. такая структура если не выделять память под внутренние элементы превращается в юнион?

Смотрел через GDB. Спасибо за помощь заранее.

 ,

alAb
()

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

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

 , , ,

alAb
()

RSS подписка на новые темы