След ъпдейт ми се появи странен проблем с линкването на програми.
Става въпрос за avr-gcc
при опит за компилиране стигам до тука
$ make
avr-gcc -Wl,-Map,labelrollm8.out.map -lm -mmcu=atmega8 -o labelrollm8.out main.o timers.o
/usr/libexec/gcc/avr/ld: cannot find crtm8.o: No such file or directory
collect2: ld returned 1 exit status
make: *** [labelrollm8.out] Error 1
Пускам последната стъпка с малко повече опции за да проговори
$ avr-gcc -v -Wl,-Map,labelrollm8.out.map -lm -mmcu=atmega8 -o labelrollm8.out main.o timers.o
Using built-in specs.
COLLECT_GCC=/usr/i686-pc-linux-gnu/avr/gcc-bin/4.5.3/avr-gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/avr/4.5.3/lto-wrapper
Target: avr
Configured with: /var/tmp/portage/cross-avr/gcc-4.5.3-r1/work/gcc-4.5.3/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/avr/gcc-bin/4.5.3 --includedir=/usr/lib/gcc/avr/4.5.3/include --datadir=/usr/share/gcc-data/avr/4.5.3 --mandir=/usr/share/gcc-data/avr/4.5.3/man --infodir=/usr/share/gcc-data/avr/4.5.3/info --with-gxx-include-dir=/usr/lib/gcc/avr/4.5.3/include/g++-v4 --host=i686-pc-linux-gnu --target=avr --build=i686-pc-linux-gnu --disable-altivec --disable-fixed-point --without-ppl --without-cloog --disable-lto --disable-nls --with-system-zlib --disable-werror --enable-secureplt --disable-multilib --disable-libmudflap --disable-libssp --disable-libgomp --with-python-dir=/share/gcc-data/avr/4.5.3/python --enable-checking=release --disable-libgcj --enable-languages=c,c++ --enable-shared --disable-threads --disable-bootstrap --with-bugurl=http://bugs.gentoo.org/ --with-pkgversion='Gentoo 4.5.3-r1 p1.0, pie-0.4.5'
Thread model: single
gcc version 4.5.3 (Gentoo 4.5.3-r1 p1.0, pie-0.4.5)
COMPILER_PATH=/usr/libexec/gcc/avr/4.5.3/:/usr/libexec/gcc/avr/4.5.3/:/usr/libexec/gcc/avr/:/usr/lib/gcc/avr/4.5.3/:/usr/lib/gcc/avr/
LIBRARY_PATH=/usr/lib/gcc/avr/4.5.3/:/usr/lib/gcc/avr/4.5.3/../../../../avr/lib/
COLLECT_GCC_OPTIONS='-v' '-mmcu=atmega8' '-o' 'labelrollm8.out'
/usr/libexec/gcc/avr/4.5.3/collect2 -m avr4 -o labelrollm8.out crtm8.o -L/usr/lib/gcc/avr/4.5.3 -L/usr/lib/gcc/avr/4.5.3/../../../../avr/lib -Map labelrollm8.out.map -lm main.o timers.o -lgcc -lc -lgcc
/usr/libexec/gcc/avr/ld: cannot find crtm8.o: No such file or directory
collect2: ld returned 1 exit status
Виждам че се дъни на линкването и го пускам и то да приказва:
$ /usr/libexec/gcc/avr/4.5.3/collect2 -verbose -m avr4 -o labelrollm8.out crtm8.o -L/usr/lib/gcc/avr/4.5.3 -L/usr/lib/gcc/avr/4.5.3/../../../../avr/lib -Map labelrollm8.out.map -lm main.o timers.o -lgcc -lc -lgcc
GNU ld (GNU Binutils) 2.21.1
Supported emulations:
avr2
avr1
avr25
avr3
avr31
avr35
avr4
avr5
avr51
avr6
opened script file /usr/i686-pc-linux-gnu/avr/binutils-bin/2.21.1//ldscripts/avr4.x
using external linker script:
==================================================
/* Default linker script, for normal executables */
OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
OUTPUT_ARCH(avr:4)
MEMORY
{
text (rx) : ORIGIN = 0, LENGTH = 8K
data (rw!x) : ORIGIN = 0x800060, LENGTH = 0xffa0
eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K
}
SECTIONS
{
/* Read-only sections, merged into text segment: */
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
......................резнато за компактност - няма нищо интересно
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
}
==================================================
attempt to open crtm8.o failed
attempt to open /usr/lib/gcc/avr/4.5.3/libm.so failed
attempt to open /usr/lib/gcc/avr/4.5.3/libm.a failed
attempt to open /usr/lib/gcc/avr/4.5.3/../../../../avr/lib/libm.so failed
attempt to open /usr/lib/gcc/avr/4.5.3/../../../../avr/lib/libm.a succeeded
attempt to open main.o succeeded
main.o
attempt to open timers.o succeeded
timers.o
attempt to open /usr/lib/gcc/avr/4.5.3/libgcc.so failed
attempt to open /usr/lib/gcc/avr/4.5.3/libgcc.a succeeded
(/usr/lib/gcc/avr/4.5.3/libgcc.a)_copy_data.o
(/usr/lib/gcc/avr/4.5.3/libgcc.a)_clear_bss.o
attempt to open /usr/lib/gcc/avr/4.5.3/libc.so failed
attempt to open /usr/lib/gcc/avr/4.5.3/libc.a failed
attempt to open /usr/lib/gcc/avr/4.5.3/../../../../avr/lib/libc.so failed
attempt to open /usr/lib/gcc/avr/4.5.3/../../../../avr/lib/libc.a succeeded
attempt to open /usr/lib/gcc/avr/4.5.3/libgcc.so failed
attempt to open /usr/lib/gcc/avr/4.5.3/libgcc.a succeeded
/usr/bin/avr-ld: cannot find crtm8.o: No such file or directory
collect2: ld returned 1 exit status
В същност виждам че файла crtm8.o неможе да го намери а го има
$ls -l /usr/avr/lib/avr4/crtm8.o
-rw-r--r-- 1 root root 1924 8 ное 2,28 /usr/avr/lib/avr4/crtm8.o
$
Поставям го с копиране при сорса и всичко се оправя.
Въпроса е такъв къде да линкна тази папка с библиотеки за да не го копирам в сорса? Или префразирано как да задам на линкера да търси тези файлове (те зависят от типа на процесора) в директорията /usr/avr/lib ? Или трети вариянт как да разбера къде трябва да е локацията на тези обектни файлове?Като малко пояснение това са библиотеки за управлението на стека на микроконтролера, и зависи за каква платформа га покзвам тази библиотека е различна. А аз компилирам един и същи код за различни платформи.
Ще се радвам ако някой има някаква идея, правилата за 'нормалното' gcc са същите няма никаква разлика, така че това че е за контролер да не смущава никой.