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.

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top