Я использую определенный набор инструментов (тот, который поставляется с BlackBerry Playbook NDK). Я думаю, что это основано на GCC 4.4.2. Когда я пытаюсь скомпилировать определенные библиотеки с помощью этой цепочки инструментов, я сталкиваюсь со странными проблемами с тем, что я считаю глобальным пространством имен С++. Например, я получу такие ошибки, как:
'::sprintf' has not been declared
Я никогда не получаю эти ошибки при компоновке со стандартной библиотекой GNU C++. Однако Playbook NDK по умолчанию использует библиотеки Dinkumware C++, и мне всегда приходится просматривать каждую ошибку и обычно добавлять эквивалент C (в данном случае stdio.h). По не зависящим от меня причинам я не могу установить ссылку на стандартную библиотеку GNU c++, в которой нет ни одной из этих проблем.
Если я пытаюсь скомпилировать более крупный проект, я могу получить сотни таких ошибок. Есть ли обходной путь, не связанный с редактированием источника? В приведенном выше примере файл обычно включает «cstdio» в качестве заголовка, но это объявляет sprintf в пространстве имен «std». Таким образом, у меня есть только один вариант: включить заголовок C или добавить пространство имен std.
<cstdio>
, а неstdio.h
- person K-ballo   schedule 10.06.2012<cstdio>
объявляет все в пространстве именstd
. Он использует<stdio.h>
, чтобы обойти это, и хотел знать, есть ли другой способ. Я не думаю, что есть, кроме префиксаstd
или использованияusing namespace std;
. - person Shoaib   schedule 10.06.2012