[OSy] include stdarg.h pri -nostdinc
Jan Smrčina
lj at fooboo.org
Mon Oct 28 21:01:39 CET 2013
Zdravim vsechny,
mam takovy problem s inkluzemi. Pro implementaci pozadovane funkce
printk() je treba nastroju pro praci s variadickymy argumenty. Standard
jazyka C uvadi, ze prislusna makra a datovy typ jsou uvedeny v souboru
stdarg.h.
A zde je muj problem. V makefilech je (zrejme z dobrych duvodu)
prekladac volan s direktivou -nostdinc, ktera rika:
"do not look for standard header files in system directories"
Pritom ale stdarg.h je standardni header file, schovany v adresari
toolchainu.
Trivialni reseni zrejme je:
#include "/usr/local/cross/mips32/lib/gcc/mipsel-linux-gnu/4.7.2/include/stdarg.h"
ale to ma zrejmy nedostatek, ze nemuze fungovat na strojich s
cross-compilerem v jinem adresari.
Druhe reseni, ktere se nabizi, je pridat prislusne definice primo do
kodu:
typedef __builtin_va_list __gnuc_va_list;
typedef __gnuc_va_list va_list;
#define va_start(v,l) __builtin_va_start(v,l)
#define va_end(v) __builtin_va_end(v)
#define va_arg(v,l) __builtin_va_arg(v,l)
#define va_copy(d,s) __builtin_va_copy(d,s)
Problem tohoto druheho reseni je zrejma ne-zcela prenositelnost mezi
kompilatory
Idealni reseni by bylo primet kompilator, aby pro tento jeden jediny
soubor udelal vyjimku z -nostdinc pozadavku, ale takove reseni jsem
zatim nedokazal vymyslet.
Ma otazka tedy je: Jak na idealni reseni? A pokud takove reseni neni
rozumne implementovatelne, je druhe reseni prijatelne (i kdyz se mi
osobne nelibi)?
Diky,
Jan Smrcina
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 479 bytes
Desc: not available
URL: <http://d3s.mff.cuni.cz/pipermail/nswi004/attachments/20131028/0114ab6e/attachment.sig>
More information about the NSWI004
mailing list