Ir para conteúdo
  • Cadastre-se

dev botao

NFe - Linux - Lazarus


vansiqq
  • Este tópico foi criado há 2892 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia, Pessoal.

Alguém aqui está usando o ACBrNFe no Linux? Estou com umas dúvidas:

1) Na versão disponibilizada no SVN, tem NFe2 para delphi e só NFe para o Lazarus. A versão do lazarus é a 2.0 ou não foi implementada ainda?

2) Mesmo sem saber essa resposta, arrisquei a instalar mas tive alguns problemas. Instalei todos os componentes do ACBr mas o NFe, apesar de compilar sem erros, apresentou problemas na hora da linkagem. Esses abaixo:

"Compilando pacote ACBr_TEFD 1.31" completado

"Compilando pacote ACBrTCP 0.9" completado

"Compilando pacote ACBrSerial 0.9" completado

/usr/bin/ld: warning: ../link.res contains output sections; did you forget -T?

/usr/bin/ld: cannot find -lxml2

/usr/bin/ld: cannot find -lxmlsec

/usr/bin/ld: cannot find -lxslt

/usr/lib/lazarus/ide/lazarus.pp(137,1) Error: Error while linking

/usr/lib/lazarus/ide/lazarus.pp(137,1) Fatal: There were 1 errors compiling module, stopping

Alguém tem alguma ideia do que devo fazer para resolver isso?

Evandro Siqueira

http://www.evandrosiqueira.com.br

twitter: http://www.twitter.com/vansiqq

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Ola Nobres.

Desculpa por reativar o tópico,mas estou com o mesmo problema e não encontrei a solução,dessa vez nem o titio Google pode me ajudar.

 

[Ambiente]

OS: Ubuntu 12.10.

Lazarus: 1.0.8

FPC:2.6.2

 

[OBS]

 /usr/bin/ld: cannot find -lxml2

 

 Esta linha do  erro eu corrigi com sudo apt-get install lxml2-dev.

 

Mas essas outras duas não consegui dar jeito.

 

/usr/bin/ld: cannot find -lxmlsec
/usr/bin/ld: cannot find -lxslt

 

Pelo que entendi esta faltando essas Libs em suas correspondentes pastas,no svn do ACBr tem elas mas só a versão para Windows *.dll,no meu caso que é linux seria *.so,mas não encontrei.

 

Conto com a ajuda de todos.

 

Grato

GabrielLampa

Link para o comentário
Compartilhar em outros sites

Ola Nobres Amigos.

 

Eu tive pesquisando bastante na Internet e lí sobre a dica de instalar o pacote  xmlsec1-1.2.19,porem mesmo assim não tive êxito.Os dois erros persistem.

 

Como disse aqui antes,o que me parece é que no Windows o Pacote ACBrOpenSSL0.1 usa as seguintes DLL's: libxml2.dll,libxmlsec.dll,libxslt.dll ,...e no Linux as mesmas bibliotecas porem com a extensão *.SO. Agora umas duvidas.

 

Essas extensões não existem para Linux?Não há aqui no fórum nem  um core developer para me responder?Se existem onde posso encontra las?

 

Obrigado a todos.

 

GabrielLampa

 

PS: Existem vários  tópicos na net com pessoas com o mesmo problema que eu,este tópico mesmo é um exemplo disso,O cara postou em Setembro de 2011 e não teve quem o respondesse. No Google Grupos tem umas threads com o mesmo problema e tambem no Yahoo grupos no projeto PCN.

Editado por GabrielLampa
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Acredito que ninguém aqui ou lá utilizou para emissão em linux ainda

então é uma grande chance de ajudar a comunidade estudando o problema e achando a solução para  ele

e postando aqui caso seja correção nos fontes ou caso seja problema de configuração no linux ;)

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • 10 meses depois ...

Sei que esse tópico esta antigo, talvez já tenham resolvido. Mas esse fim de semana me deparei com o mesmo problema, pois fui implementar pela primeira vez no Linux o ACBR.

 

Depois de 3 dias de muito trabalho estou com tudo funcionando perfeitamente inclusive o ACBRNfe no Linux 64bits c/ Lazarus 1.0.12, 1.0.14 ou 1.2.0.

 

É muita coisa para digitar aqui, então quem tiver interesse entra em contato por email.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Sei que esse tópico esta antigo, talvez já tenham resolvido. Mas esse fim de semana me deparei com o mesmo problema, pois fui implementar pela primeira vez no Linux o ACBR.

 

Depois de 3 dias de muito trabalho estou com tudo funcionando perfeitamente inclusive o ACBRNfe no Linux 64bits c/ Lazarus 1.0.12, 1.0.14 ou 1.2.0.

 

É muita coisa para digitar aqui, então quem tiver interesse entra em contato por email.

 

Olá, Ricardo!

 

Eu tenho muito interesse.

Mas não consegui visualizar seu e-mail....

 

As modificações que você fez estão a cerca do ambiente ou do próprio componente?

 

Pergunto pois, para conseguir fazer funcionar em Mac OSX eu sofri bastante, tive que alterar muita coisa no componente chamando diretamente o executável do OpenSSL para realizar algumas funções e isso tornou o componente praticamente incompatível para outros ambientes. Até que dava para compatibilizar, mas acho que não seria do agrado dos outros usuários... Até nem havia mencionado isso aqui no fórum.

 

Eu consegui emitir perfeitamente em Linux 32bits sem alterar nada no componente, como não havia tido sucesso na versão 64bits, instalei a 32bits e não tentei mais... Seria uma boa voltar a usar a 64bits.

 

Se você puder compartilhar, será de muita valia.

 

Att.

 

Messias Henrique

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

Bom dia!

 

Estou com essa dificuldade também, depois de várias pesquisas não consegui instalar acbrnfe2.

Fiz a instalação do pacote xmlsec, mas não deu certo.

Quem conseguiu poderia me dar uma ajuda?

 

O erro que acontece é:

/usr/bin/ld: cannot find -lxmlsec
/usr/bin/ld: cannot find -lxslt

 

Att,

Júlio César

Londrina-Pr

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

Fiz a instalação do pacote xmlsec, mas não deu certo.

Quem conseguiu poderia me dar uma ajuda?

 

O erro que acontece é:

/usr/bin/ld: cannot find -lxmlsec

/usr/bin/ld: cannot find -lxslt

Olá, Júlio!

 

Antes de mais nada, devo adiantar que consegui instalar e utilizar o ACBrNFe no Linux 32bits (apenas).

 

Você deve instalar o xmlsec pelos fontes (compilando manualmente pelo terminal) . Não funciona com pacotes pré-compilados (tipo apt-get etc...)

Depois você precisa setar a biblioteca para o diretório /usr/lib/ através de links simbólicos...

 

Se tiver alguma dúvida de como fazer, posta aí que explico melhor.

 

Já na arquitetura 64bits eu não consegui ainda... (vou tentar novamente dentro de alguns dias).

 

Att.

 

Messias Henrique

Link para o comentário
Compartilhar em outros sites

  • 4 meses depois ...

Olá pessoal!

 

Sou novo no mundo linux e tenho projetos para migrar meus sistemas para lazarus possibilitando o funcionamento dos aplicativos em windows e linux, mas ao tentar instalar alguns componentes como por exemplo o ACBrNFe2 apresenta as mensagens abaixo:

/usr/bin/ld: cannot find -lxmlsec
/usr/bin/ld: cannot find -lxslt

 

Alguém já conseguiu resolver isso?

Poderiam me dar uma ajuda?

Utilizo o Ubuntu 14.04 64bits.

 

Agradeço desde já qualquer ajuda.

Link para o comentário
Compartilhar em outros sites

Depois de muita insistência e pesquisa consequi instalar duas delas o libxml2 o xstl segue abaixo como eu consegui para os que estão com o mesmo problema:

 

# Instalar o autoconf e o gettext, pacotes de ferramentas necessárias para compilar código em C.
sudo apt-get install autotools-dev libxcb1-dev libxcb-randr0-dev gettext autoconf autopoint

 

[ libxml2 ]
sudo apt-get update
apt-cache search libxml
apt-cache search libxml | grep dev
sudo apt-get install libxml2-dev
apt-cache show libxml2-dev
sudo apt-get install libxml2-utils
sudo apt-get install checkinstall
 

 

[ xstl ]
#Baixar a biblioteca em ftp://xmlsoft.org/ ou xmlsoft.org.
#Se for tar.gz: (desconpacte entre na pasta e execute os procedumentos abaixo)
./configure --prefix=/usr
make
sudo make install

#Se for .zip: (desconpacte entre na pasta e execute os procedumentos abaixo)
./autogen.sh --prefix=/usr
make
sudo make install
 

 

Já o xmlsec... ainda estou tendo problemas.

Utilizei o comando apt-get install xmlsec, mas o que está disponível é apt-get install xmlsec1 e apt-get install xmlsec1-dev.

Eu instalei mas não funcionou, continua dando a mensagem abaixo, e só falta ele para eu conseguir instar os demais componetes do ACBr.

Atualizei para xmlsec1 1.2.20 (openssl) e nada, continua apresentando o erro:(

 

Como faço para instalar essa biblioteca, onde eu a consigo?

/usr/bin/ld: cannot find -lxmlsec

 

apt-cache show xmlsec1
Package: xmlsec1
Priority: optional
Section: universe/text
Installed-Size: 120
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: John V. Belmonte <[email protected]>
Architecture: amd64
Version: 1.2.18-2ubuntu1
Depends: libc6 (>= 2.14), libxml2 (>= 2.7.4), libxmlsec1 (>= 1.2.18), libxmlsec1-openssl (>= 1.2.18), libxslt1.1 (>= 1.1.25)
Filename: pool/universe/x/xmlsec1/xmlsec1_1.2.18-2ubuntu1_amd64.deb

Size: 22026
MD5sum: d12fe050398d9f63d7a3be0be656c3bb
SHA1: 373588b9350ad3685976b54189c8146132ab6a00
SHA256: c1f590662a0a14ca318234b01a02ee132e8e492a99b4298abcc953995e4216b5
Description-pt_BR: processador de linha de comando para segurança de XML
 XMLsec é uma ferramenta de linha de comando para transformações
 criptográficas e assinatura de dados XML. Ela é parte da XML Security
 Library (Biblioteca para Segurança de XML).
Description-md5: 549bfc534604f9a3fe2dca801860e34f
Homepage: http://www.aleksey.com/xmlsec/
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu
 

Editado por vca_rj
Link para o comentário
Compartilhar em outros sites

Vi que muitos estavam tentando fazer rodar em Linux, então tentei fazer funcionar, e consegui!

Façam o seguinte:

 

para instalar o xmlsec tente: apt-get install libxmlsec1 (aconselho usar o synapse que fica bem mais facil de encontrar as lib's requeridas)

 

Criar os links simbólico referentes as bibliotecas de suporte ao ACBrOpenSSL: 'libxml2.so', 'libxmlsec.so', 'libxslt.so' (lembrado que depende da distribuição Linux utilizada,

Estou usando O Mint derivada do Debian) Acredito que deva funcionar para todas desde que seja obedecida a estrutura de pastas correspondente e que tenham efetuado

antes a instalação destas libs no seu Linux.

 

sudo ln -s  /usr/local/lib/libxmlsec1.so.1.2.18  /usr/local/lib/libxmlsec1.so.1
sudo ln -s  /usr/local/lib/libxmlsec1.so.1.2.18  /usr/local/lib/libxmlsec.so
sudo ln -s  /usr/local/lib/libxmlsec1.so.1.2.18  /usr/bin/libxmlsec.so
sudo ln -s  /usr/local/lib/libxmlsec1.so.1.2.18  /usr/lib/libxmlsec.so

 

Criei os link simbólicos para libxmlsec.so nos possíveis diretório source do lazarus.

Faça o mesmo para as outras bibliotecas 'libxml2.so , libxslt.so. (Tentem localiza-las em seu sistema Linux antes de proceguir, pois as versões mudam muito, incluisive a 'libxmlsec1.so.1.2.18' pode ser outra utilizada no seu Linux).

Na unit ACBrNFeUtil.pas
Comentei as linhas que fazem a checagem de compatibilidade da biblioteca xmlsec
{ Check loaded library version }
// if (xmlSecCheckVersionExt(1, 2, 8, xmlSecCheckVersionABICompatible) <> 1) then
//  raise Exception.Create('Error: loaded xmlsec library version is not compatible.');
 

Link para o comentário
Compartilhar em outros sites

Olá Vlademir Pereira de Lima!

Desde já agradeço sua atenção.

 

Você fez esse teste em um SO Linux 64bits?

 

Passou, mas o lazarus não inicializa!

Tentei desistalar, mas continuava sem inicializar (mostrava a tela de splash de inicialização e depois fechava de vez).

Tive que excluir tudo que tinha do lazarus, para poder reinstalar e começar do zero.

 

Utilizo o ubuntu 14.04 64bits.

Editado por vca_rj
Link para o comentário
Compartilhar em outros sites

  • 8 meses depois ...

Olá 

 

Ubuntu 14.04 64bits , FPC 2.6.4  , LAZARUS 1.2.6

 

Fiz todos procedimentos acima , quando vou instalar o pacote ACBr_NFe2  dá o erro abaixo

 

Unable to find file "../../../Fontes/ACBrCapicom/ACBrCAPICOM_TLB.pas".
If it belongs to your project, check search path in
Project -> Compiler Options -> Search Paths -> Other Unit Files. If this file belongs to a package, check the appropriate package compiler options. If this file belongs to Lazarus, make sure compiling clean. If the file belongs to FPC then check fpc.cfg. If unsure, check Project -> CompilerOptions -> Test
 
 
Como faço para  o Lazarus ignorar a CAPICOM??
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Conforme já existem post e tópicos falando existe o arquivo ACBr.inc

descomentar as linhas no inicio que falam sobre openssl para os componentes!

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

Pessoal ;

 

Para dar um retorno sobre minha solução final;

 

- Tentei todas as possibilidades com Ubuntu 64

 

- Tentei todas as possibilidades com Ubuntu 32

 

O XMLSEC sempre dá o problema.

 

Joguei a Toalha porque não consegui.

 

Fui obrigado a instalar RUINDOWS numa VM e vou desenvolver a aplicação LAZARUS WINDOS CAPICOM

 

Se alguém tiver uma LUZ sobre este problema favor postar aqui, será bem vinda.

 

Obrigado

Editado por gabriel.hilbig
Link para o comentário
Compartilhar em outros sites

  • 11 meses depois ...

@Ricardo David Consolo: Você conseguiu compilar em 32 ou 64 bits? Você compilou um demo completo de nfe usando o ACBR?

@gabriel.hilbig: O travamento do Lazarus acontece porque ele só linka com pacotes de forma estática (sempre que você tenta instalar um pacote, o Lazarus dá um aviso e recompila/relinka ele). Quando há um erro de link em tempo de execução, ele trava e não dá pra recuperar (só recompilando o lazarus sem o pacote que provoca o travamento, mas não sei como fazer isso manualmente "de fora" do lazarus) então a solução mais simples é reinstalar.

Eu consegui compilar e executar com sucesso um demo simples (uma aplicação em linha de comando) do acbr que faz o seguinte: carrega o xml de uma nfe e imprime o DANFE dessa nfe. Mas as alterações que eu precisei fazer pra isso são hacks, precisamos de uma solução mais consistente pra integração ao projeto (caso alguém tenha conseguido fazer um demo em 64 bits fazendo **menos** coisas que eu fiz, avise).

Vou revisar abaixo tudo o que fiz até o momento (espero ainda validar e melhorar esse processo). Detalhe: **não** instalei os pacotes em design time, usei apenas para um demo em runtime).

Meu ambiente:

  - VM Ubuntu **64 bits** (instalação em uma VM limpa, apenas com o SO básico versão desktop)
  - Instalação do lazarus 1.7 e FPC 3.0 (usado script disponível em www.getlazarus.org)
  - Nenhum pacote de biblioteca compilado via source (**tudo** via apt-get)
  - Instalado (via apt-get, pacote binário e -dev): libxml2, libxmlsec1, libxmlsec1-openssl, libxslt1
  - Criado symlinks para as bibliotecas libxmlsec1 e libxmlsec1-openssl:
    - # ln -s /usr/lib/libxmlsec1.so /usr/lib/libxmlsec.so
    - # ln -s /usr/lib/libxmlsec1-openssl.so /usr/lib/libxmlsec-openssl.so

Até aqui tudo é bem óbvio: no código da unit libxmlsec.pas a biblioteca dinâmica é referida como libxmlsec.so, mas o pacote do ubuntu não instala esse link, ele instala só com o sufixo da versão, então precisa criar o symlink pro lazarus achar.

Nesse ponto, comecei a ter erros de compilação de que funções não estavam sendo encontradas (exemplo xmlSecCryptoAppInit). Verificando o libxmlsec.so com o utilitário nm do linux pra exportar os símbolos, verifiquei que essa biblioteca não tem essa função. Interpretando a documentação da libxmlsec, essa função é "mágica", dependendo do plugin específico que for usado (nss, openssl, etc) ela vai efetuar a chamada pra função desse plugin específico. Mas a versão compilada pro repositório do ubuntu (dedução minha, não cheguei a verificar) não implementa essa mágica, ele foi compilado pra usar uma seleção manual de provider de api crypto.

Solução: Modifiquei o libxmlsec.pas pra pegar as funções a partir da biblioteca dinamica libxmlsec-openssl. Segue snippet de código:

//arquivo libxmlsec.pas

const
{$IFDEF WIN32}
  LIBXMLSEC_SO = 'libxmlsec.dll';
{$ELSE}
  LIBXMLSEC_SO = 'libxmlsec.so';
  LIBXMLSEC_OPENSSL_SO = 'libxmlsec-openssl.so';
  {$DEFINE STATICLIBXMLSECOPENSSL}
{$ENDIF}

//...

  {$IFDEF STATICLIBXMLSECOPENSSL}
  function xmlSecCryptoAppInit (const config: PAnsiChar) : Longint; cdecl; external LIBXMLSEC_OPENSSL_SO name 'xmlSecOpenSSLAppInit';
  //... correção de todas as outras funções xmlSecCrypto****
  {$ELSE}
  function xmlSecCryptoAppInit (const config: PAnsiChar) : Longint; cdecl; external LIBXMLSEC_SO; 
  //... funções tradicionais
  {$ENDIF}

As partes relevantes da alteração são: trocar a biblioteca referenciada pelo external e usar um nome explícito de função pra mapear a função do provider (xmlSecOpenSSLAppInit) para a função "mágica" (xmlSecCryptoAppInit).

Fazendo isso, consegui compilar todos os pacotes relevantes (**não instalei**, apenas compilei) e consegui buildar o meu demo.

Porém comecei a ter erros durante a execução do programa, um segfault na função _dl_load_func_x("emptyExp") logo ao iniciar o programa (antes de executar qualquer instrução minha).

Cavando mais um pouco, descobri que a exceção acontece na inicialização da unit libxml2.pas, quando (na inicialização) é tentado carregar o símbolo "emptyExp" de forma manual.

Fiz vários experimentos, e parece que a origem do problema é quando (no Lazarus de 64 bits ou no executável de 64 bits, não consegui isolar em qual e também não verifiquei em uma versão de 32 bits) é misturado carregamento estático e dinâmico de biblioteca. Se eu carregar só estaticamente (declarando a função com external) funciona. Se eu usar apenas carregamento dinâmico (loadLibrary/getProcAddress) também funciona. O problema é misturar as duas técnicas, como nas bibliotecas do libxml.

Eu fiz uma busca rápida e não achei nenhuma referência às variáveis carregadas dinamicamente (emptyExp, forbiddenExp, etc) das units do libxml2 (não só no libxml2.pas mas no libxmlsec.pas e libxslt.pas também usam o mesmo modelo de carregamento). Ou seja, elas estão nas units (porque o acbr importou essas units) mas não estão sendo efetivamente usadas (pelo menos as poucas que eu procurei).

Então eu comentei o código de inicialização das units.

Fazendo isso, eu consegui compilar e executar meu demo em linux 64 bits.

A solução definitiva pra esse último problema (e a solução adequada pro problema do nome da dll do libxmlsec) é alterar as units de carregamento pra fazer **exclusivamente** carregamento dinâmico de dll.

Eu **não** chequei todas as funcionalidades do acbr, apenas essa pequena funcionalidade do meu demo. Mas acho que é um ponto de partida pra quem por aí não está conseguindo progredir em usar o acbr no linux 64 bits.

Se alguém conseguiu compilar e executar funcionalidades relativas a nfe em linux **64 bits** sem precisar fazer tudo isso que eu fiz (e preferencialmente sem precisar recompilar nenhuma biblioteca a partir dos fontes), dá um grito.

 

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2892 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.