[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