Open mianqi2016 opened 3 years ago
Hi I think your GCC version is too old ?
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
After I ran "sudo pip install -U -r requirements.txt" in directory "mbed-os", it was prompted a python module "future" was missing, before I ran "sudo pip install -U -r requirements.txt", it was prompted 3 python modules "future, requests, click" were missing. Then I ran "pip install future" under "mbed-os", it was said "future" has been installed, but there was still error:ws_pae_time.c@174,103: expected ')' before 'PRIi64'.
I found the function where "Error" was prompted:
`int8_t ws_pae_current_time_set(uint64_t time) { uint64_t new_system_time; current_time = time;
tr_debug("Current time set: %"PRIi64, time);
if (ns_time_system_time_read(&new_system_time) == 0) {
// System time has gone backwards
if (new_system_time < current_time || new_system_time > current_time + SYSTEM_TIME_MAXIMUM_DIFF) {
tr_error("FATAL: system time less than reference time or more than 12 months in future: %"PRIi64" reference time: %"PRIi64, new_system_time, current_time);
return -1;
}
}
return 0;
} `
Should "expected ')' before 'PRIi64'" ?
If you use --verbose
you should be able to get a command and just run it to compile the file. I don't think this is related to mbed tools but rather gcc.
Our tests compile OK with Gcc Arm for multiple boards: you can check the latest nightly http://mbed-os-ci-public.s3-website-eu-west-1.amazonaws.com/?prefix=jenkins-ci/ARMmbed/mbed-os/mbed-os-ci-nightly/artifacts/master/943/build-example-GCC_ARM/PASS/
I think this is related to https://en.cppreference.com/w/cpp/types/integer especially see the:
Because C++ interprets a character immediately following a string literal as a user-defined string literal, C code such as printf("%"PRId64"\n",n); is invalid C++ and requires a space before PRId64.
Simple fix would be to change:
tr_debug("Current time set: %"PRIi64, time);
to
tr_debug("Current time set: %" PRIi64, time);
But I recall that this does not occur with GCC10 anymore, I have seen few similar reports with GCC9 compiler. (I just was not able to reproduce the issue myself).
Thanks @teetak01
The nightly I shared are using v10, however previously we run Gcc 9 (updated back in August so the code its failing was already present on master).
Can you test the proposed fix? And send a pull request if it's tested ?
The thing is, there are few dozen entries like this in Mbed OS (nanostack) code (which is C), and it has been there for years. I wonder if something else has changed in between that triggered this kind of check/error. Yet, that has never reproduced in CI with any compiler.
Of course most/all of those seem to be in trace-lines, so non-trace enabled builds probably will not be impacted.
The C++ space thing is specifically C++11 or later, and we did have to clear that up from a bunch of C++ files when we moved to C++14 in Mbed OS. Doesn't affect C99 files like this. And you'd get a different error message about an unknown user-defined literal.
This error seems to correspond to PRIi64
being undefined, which it shouldn't be, because mbed_trace.h (at least the versions I'm looking at) includes <inttypes.h>
which should provide it.
Do try adding the space, but if that fixes it, I think that would be a compiler bug.
I can't offer a better explanation at the minute. Check that your mbed_trace.h is including <inttypes.h>
.
I tried to compile the Blinky example by Mbed CLI, while it was prompted: https://ibb.co/FhtfkFr
I have already used "sudo pip install -r requirements.txt": https://ibb.co/NnJfF1T https://ibb.co/1G8LPFW