В соответствии с инструкциями Сэма я разработал простое приложение, показывающее прокрутку двух списков вместе. На самом деле моей главной целью является создание горизонтально прокручиваемого расширяемого списка с фиксированными / замороженными столбцами, и работа над ним, когда он будет завершен, скоро предоставит к нему доступ https://github.com/huseyinDaVinci/Android/tree/master/FrozenListViews
Я думаю, что самое близкое, что вы можете получить, это компиляция и связывание с -fno-исключения и -fno-rtti. Если есть лучший способ избавиться от остального, я был бы рад услышать его сам.
Что касается избавления от новых, попробуйте -nostdlib.
, поскольку вы в основном делаете то, что разработчик ОС сделал бы, чтобы получить автономную среду c или c ++. Возможно, вы захотите изучить простой сценарий компоновщика. Вам просто нужно быть осторожным, потому что такие вещи, как глобальные конструкторы, больше не происходят автоматически .. но вы также не получите ничего, о чем не просили явно (и нетрудно написать код для вызова глобальных конструкторов). Вот сценарий компоновщика из моей ОС.
OUTPUT_FORMAT("elf32-i386")
ENTRY(start)
virt = 0xc0100000; /* 3.1 gig */
phys = 0x00100000; /* 1 meg */
SECTIONS
{
.text virt : AT(phys)
{
code = .; _code = .; __code = .;
*(.text)
*(.gnu.linkonce.t*)
. = ALIGN(4096);
}
.rodata : AT(phys + (rodata - code))
{
rodata = .; _rodata = .; __rodata = .;
*(.rodata*)
*(.gnu.linkonce.r*)
__CTOR_LIST__ = .;
LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
*(.ctors)
LONG(0)
__CTOR_END__ = .;
__DTOR_LIST__ = .;
LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
*(.dtors)
LONG(0)
__DTOR_END__ = .;
. = ALIGN(4096);
}
.data : AT(phys + (data - code))
{
data = .; _data = .; __data = .;
*(.data)
*(.gnu.linkonce.d*)
. = ALIGN(4096);
}
.tbss : AT(phys + (tbss - code))
{
tbss = .; _tbss = .; __tbss = .;
*(.tbss)
*(.tbss.*)
. = ALIGN(4096);
}
.bss : AT(phys + (bss - code))
{
bss = .; _bss = .; __bss = .;
*(.bss)
*(.bss.*)
*(COMMON)
*(.gnu.linkonce.b*)
. = ALIGN(4096);
}
end = .; _end = .; __end = .;
}
Он, вероятно, делает больше, чем вам нужно (выравнивает разделы по границам 4k, имеет все символы на отметке> 3 ГБ), но является хорошей отправной точкой.
Вы можете использовать его следующим образом:
ld -T link_script.ld *.o -lc -o appname
"
Вы можете попробовать перехватить new, чтобы увидеть, действительно ли он вызывается.
New может происходить неявно при некоторых обстоятельствах, например, при построении копирования.
Вы можете сделать это удалите их, написав свой код немного иначе.
http://www.linuxtopia.org/online_books/programming_books/thinking_in_c++/Chapter11_013.html