Hi,
I have two problems with compiling my program.
One is that I cannot get correct output with Genode::printf or sprintf for (unsigend) long long values.
Below is my code:
#include <base/printf.h>
#include <stdio.h>
#include <sys/types.h>
int main()
{
char test_buf[24];
uint64_t llu_var = 1234567801234ULL;
sprintf(test_buf, "%llu", llu_var);
Genode::printf("result of test_buf:%s\n", test_buf);
Genode::printf("llu_var:%llu\n", llu_var);
return 0;
}
I compiled this with "LIBS += env cxx libc" in target.mk and built it for foc_pbxa9 on QEMU.
The result is strange:
[init->mytest] result of test_buf:2153943278813471
[init->mytest] llu_var:8212781840017129473
Another one is that I get compilation errors as below:
source codes:
#include <base/printf.h>
#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <sstream>
using namespace std;
template <class T>
inline string to_string(const T& t)
{
stringstream ss;
ss << t;
return ss.str();
}
int main()
{
int64_t value = 1023456LL;
Genode::printf("sstream value:%lld, to_string:%s\n", value, to_string(value).c_str());
return 0;
}
in target.mk
LIBS += stdcxx env cxx libc
CC_OPT += -D_GLIBCXX_HAVE_MBSTATE_T
error message:
/usr/local/genode-gcc/bin/../lib/gcc/arm-elf-eabi/4.6.1/../../../../arm-elf-eabi/lib/libstdc++.a(eh_catch.o): In function '__cxa_begin_catch':
(.text.__cxa_begin_catch+0xc0): undefined reference to '__Unwind_Complete'
/usr/local/genode-gcc/bin/../lib/gcc/arm-elf-eabi/4.6.1/../../../../arm-elf-eabi/lib/libstdc++.a(eh_catch.o): In function '__cxa_end_catch':
(.text.__cxa_end_catch+0x30): undefined reference to '__Unwind_DeleteException'
/usr/local/genode-gcc/bin/../lib/gcc/arm-elf-eabi/4.6.1/../../../../arm-elf-eabi/lib/libstdc++.a(eh_catch.o): In function '__cxa_end_catch':
(.text.__cxa_end_catch+0xdc): undefined reference to '__Unwind_DeleteException'
collect2: ld returned 1 exit status
make[2]: *** [mytest] Error 1
Does any one know how to fix these?
Thanks.