USTL ou STLport para Android?
-
22-07-2019 - |
Pergunta
Eu estou trabalhando com o Android NDK, e uma vez que não suporta actualmente a STL, eu queria saber se existem pessoas brilhantes lá fora que tiveram sucesso com isso, ou sabe que é mais adequado para a plataforma Android :. USTL ou STLport
EDIT: Parece outra opção pode ser CrystaX .NET .
De seu site:
... distribuição personalizada do Android NDK R3 que tenho reconstruído a partir fontes oficiais. Apoio de C ++ exceções, RTTI e C ++ padrão Biblioteca acrescentou.
Solução
STLport apoiado desde Android2.3 agora !!!
Outras dicas
Portos de STL são oficialmente disponível no NDK Android a partir da versão R5 por diante. Ele pode ser usado tanto como um estático ou biblioteca compartilhada. As seguintes implementações estão disponíveis pré-construídos com o NDK:
- STLport , com base em v5.2.0:
-
stlport_static
estática:. Usar se você tem apenas uma biblioteca dinâmica no seu projeto -
stlport_shared
dinâmica:. Para usar se você tem mais de uma biblioteca dinâmica no seu projeto
-
- GNU libstdc ++
system
(biblioteca estática)
A maneira recomendada, fácil de usá-lo em tempo de construção é definindo APP_STL na Application.mk, como este:
APP_STL := stlport_static
E se você quiser para reconstruí-lo (isto é não necessário), definir STLPORT_FORCE_REBUILD em sua Application.mk:
STLPORT_FORCE_REBUILD := true
O framework de teste de unidade para STLport também está disponível.
limitações atuais para STLport :
- Exceções C ++ não é suportado
- RTTI não suportado
- "bugs provável" em apoio para
wchar_t
e locais
Vários Links:
A documentação está disponível nos pacotes NDK nos seguintes locais (pode haver mais):
- docsCPLUSPLUS-support.html
- sources / CXX-STL / STLport
- sources / CXX-STL / gnu-libstdc ++
Fazer download NDK + docs aqui ; erros de arquivo aqui
Abaixo está um trecho de docs / CPLUSPLUS-support.html (a partir de docs NDK, R5)
III. Selecionando a implementação da biblioteca padrão C ++:
Por padrão, os cabeçalhos e bibliotecas para a mínima C ++ sistema de execução biblioteca (/system/lib/libstdc++.so) são utilizados na construção de fontes de C ++.
No entanto, pode seleccionar uma implementação diferente, definindo a variável APP_STL para outra coisa em sua Application.mk, por exemplo:
APP_STL: = stlport_static
Para selecionar a implementação STLport estático fornecido com este NDK. valores APP_STL Valor são os seguintes:
Sistema -> Use o mínimo de C ++ biblioteca de tempo de execução padrão. stlport_static -> Use STLport construído como uma biblioteca estática. stlport_shared -.> Use STLport construído como uma biblioteca compartilhada
AVISO: advertência importante
AT THE MOMENT, OUR STLPORT IMPLEMENTATION DOES NOT SUPPORT EXCEPTIONS
AND RTTI. PLEASE BE SURE TO NOT USE -fexceptions OR -frtti IN ALL
MODULES THAT USE IT.
AVISO: fim de advertência importante
"stlport_shared" é preferível se você tem várias bibliotecas compartilhadas em seu projeto que usar o STL C ++, porque evita a duplicação de funções e mais importante de variáveis ??globais (por exemplo, std :: cout) em cada um dos los, o que pode ter resultados surpreendentes.
Por outro lado, você vai ter que carregá-lo explicitamente ao iniciar o seu aplicação, como no exemplo a seguir:
static {
System.loadLibrary("stlport_shared");
System.loadLibrary("foo");
System.loadLibrary("bar");
}
Onde ambos "libfoo.so" e "libbar.so" dependem "libstlport_shared.so".
Note que o nome da biblioteca compartilhada se "libstlport_shared.so" para evitar conflitos de nomes com certas imagens do sistema Android, que incluem um libstlport.so de nível de sistema (que passa a não ser estável e ABI- não pode ser usado a partir do código máquina NDK-gerada).
"stlport_static" é preferível se você tem apenas uma biblioteca compartilhada na sua projeto: apenas as funções STL e variáveis ??que você realmente precisa será ligado ao seu código de máquina, reduzindo o seu tamanho do código, e você não vai precisar para carregar a dinâmica stlport_shared na inicialização.
IV. questões específicas-STLport:
Esta NDK fornece estática pré-construídos e bibliotecas compartilhadas para STLport, mas você pode forçá-lo a ser reconstruído a partir de fontes, definindo o seguinte em seu ambiente ou a sua Application.mk antes de construir:
STLPORT_FORCE_REBUILD := true
STLport está licenciada sob um estilo BSD open-soulicença rce. Vejo sources / CXX-STL / STLport / README para mais detalhes sobre a biblioteca.
V. Planos futuros:
- Faça STLport compatível com exceções C ++ e RTTI
- Suporte completo GNU libstdc ++
- Suporte USTL?
Basta notar que USTL desvia do padrão um pouco. Por exemplo, assume-se UTF-8 para std :: cadeia. Ainda parece interessante, embora ...
Recentemente, deparei com algumas scripts auxiliares e um porto de STLport para Android , por John Ripley.
Há também um post relacionado com instruções de como configurá-lo .
Eu acho que isso pode tornar mais fácil para ir com STLport.
é assim que eu configurado STLport para trabalhar com Android Froyo.
// The code
// The set of definitions and includes for STLPort
// They used defined() instead of #ifdef.
#define _STLP_HAS_INCLUDE_NEXT 1
#define _STLP_USE_MALLOC 1
#define _STLP_USE_NO_IOSTREAMS 1
#include <stl/config/_android.h>
#include <map>
#include <string>
// Android.mk
# For Android STL support
LOCAL_C_INCLUDES += external/stlport/stlport
LOCAL_SHARED_LIBRARIES += libstlport
Andrew
Note que a menção repositório git no link de resposta de Stjepan Rajko não existe mais. fontes alternativas estão em anddev e, via git, no git: // STLport .git.sourceforge.net / gitroot / STLport / STLport. Eu encontrei o último em uma discussão mais longa de usar tanto STLport e impulso sob Android.
Desde a primeira resposta a esta pergunta, eu ter começado a STLport anddev ao trabalho com a minha biblioteca que também chama impulso, incluindo o shared_ptr problemático. Para mais detalhes sobre a minha solução see esta questão .