messiashenrique Postado 3 Novembro, 2015 Postado 3 Novembro, 2015 Olá comunidade! É com imenso prazer que venho comunicar-lhes a compatibilidade dos componentes ACBrNFe, ACBrCTe e etc... em ambientes Linux 64btis. Sim. Agora é possível! Depois de um longo tempo de tentativas, resolvi, neste fim de semana, remover dotas as chamadas estáticas que haviam nas unidades: libxmlsec.pas, libxml2.pas, libxslt.pas e libexslt.pas e reconstruir apenas as necessárias com implementações que realizam chamadas dinâmicas às bibliotecas. Nenhuma modificação foi realizadas em unidades "específicas do projeto ACBr" e sim apenas nos quatro arquivos citados acima. A princípio, percebi que era possível recriar a LCL (Lazarus) se não fosse realizado nenhum vínculo estático com libs 64bits (ou universais - caso MacOS). Logo resolvi reimplementar todos os métodos existentes nessas bibliotecas com chamadas dinâmicas. No entanto, qual foi minha surpresa, existem milhares (sem exagero) de métodos com vinculação estáticas nesses arquivos. Só no libxml2, para se ter uma ideia, depois de criar um pequeno automatizador para me auxiliar na conversão, o arquivo ficou com mais de 35 000 linhas e alguns erros em funções desnecessárias ao funcionamento dos componentes do ACBr. Logo, eu resolvi recriar apenas aquelas que eram necessárias (algumas dezenas). Feito isso, consegui compilar, recriar a IDE e fazer funcionar o componente ACBrNFe (acredito que outros também funcionarão, já que não houve nenhuma modificação ao nível deles). Reforçando: Todas as modificações se deram nos quatro arquivos já citados acima que fazem parte do pacote ACBrOpenSSL. As unidades modificadas podem ser encontradas em https://github.com/messiashenrique/xmlsec4pascal e em anexo nesse post. Gostaria de salientar que estou fazendo testes em ambiente Linux 32 e 64bits (usando Ubuntu 15.10). Portanto, ficaria muito grato se alguém pudesse testar no Windows tanto com Delphi como com o próprio Lazarus. Obs.: Tentei postar aqui os prints de tudo funcionando e as próprias unidades modificadas, mas aparece um janelinha dizendo que só posso fazer upload de 1024kb, sendo que as unidades zipadas medem 83kb e os prints também são pequenos. Qualquer dúvida quanto a instalação,, ou outra qm que eu puder ajudar, coloco-me a disposição. Att. Messias Henrique 5
Fundadores Daniel Simoes Postado 3 Novembro, 2015 Fundadores Postado 3 Novembro, 2015 Oi Messias, Parabéns pela iniciativa... vou analisar em breve... No caso da carga dinâmica, as Libs não precisarão ser lidas, quando a IDE for carregada, ou a aplicação iniciada... Porém, quando formos usar o componente ACBrNFe, a leitura das Libs precisarão ser efetuadas... nesse caso, isso funcionará ? Digo, se o problema é carregar as Libs, essa modificação não está apenas adiando o problema ? 1 Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
messiashenrique Postado 3 Novembro, 2015 Autor Postado 3 Novembro, 2015 Olá Daniel, bom dia e obrigado. Então, Daniel, antes cheguei a pensar isso também... Mas fiz um pequeno teste e vi que o problema não é ao carregar a Lib e sim ao criar a parte gráfica com lib carregada. Da forma que está, a lib é carregada em um handle no início da execução do método e logo depois é liberada. Fiz esse teste em um form mesmo e vi que dava certo. Então acreditei que ia funcionar também com o componente. Veja as imagens em anexo Att. Messias Henrique Agora precisamos testar em outros ambientes (principalmente Windows com Delphi - que não tenho aqui). Acredito que funcione, mas é bom testar! Att. Messias Henrique 1
Alexsander Postado 4 Novembro, 2015 Postado 4 Novembro, 2015 Testei aqui e funcionou. 1 Alexsander da Rosa Rednaxel Informática http://rednaxel.com
Alexsander Postado 9 Novembro, 2015 Postado 9 Novembro, 2015 Tem previsão pra essas novas units entrarem no SVN ? Alexsander da Rosa Rednaxel Informática http://rednaxel.com
Fundadores Daniel Simoes Postado 9 Novembro, 2015 Fundadores Postado 9 Novembro, 2015 Estou com muito pouco tempo para a analise... Acredito que o ideal seria criar novas Units baseadas nas modificações, mas com um nome próprio "ACBr_*.pas" e remover todo o código que foi comentado... 2 Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
Fundadores Daniel Simoes Postado 19 Novembro, 2015 Fundadores Postado 19 Novembro, 2015 Fiz um teste rápido, no Windows 10, com as novas Units, mas comecei a receber SIGSEGV (A.V.) na inicialização das Libs Por enquanto vou manter as Libs atuais (originais do projeto libxml2-pas, com carga estática) 1 Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
Consultores EMBarbosa Postado 24 Novembro, 2015 Consultores Postado 24 Novembro, 2015 Se ela é baseada no projeto libxml2-pas, o @messiashenrique poderia enviar um push-request diretamente para eles. O que acha messiashenrique? 1 []'s Elton Profissionalize o ACBr na sua empresa, conheça o ACBr Pro. (15) 2105-0750 (15)99790-2976. Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas. Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
almp1 Postado 16 Dezembro, 2015 Postado 16 Dezembro, 2015 Olá @messiashenrique ! Estou usando ubuntu 15.10 64-bits, Lazarus 1.4.0+dfsg-5, FPC 2.6.4. Enfrentei o mesmo problema que você e muitos outros, baixei os fontes que você forneceu e tudo está funcionando. Vou iniciar um projeto com NFSe, acredito que não terei problemas. Obrigado pela ajuda André Medeiros
almp1 Postado 23 Dezembro, 2015 Postado 23 Dezembro, 2015 Olá Amigos Conforme o post acima só consegui instalar o ACBrOpenSSL no Linux64 usando as libs que o Messias Henrique disponibilizou no git https://github.com/messiashenrique/xmlsec4pascal. Precisei fazer alguns ajustes nas units para prosseguir um pouco mais, pois na procedure IntXmlSec da unit ACBrDFeOpenSSL.pas foram encontrados alguns problemas. Os ajustes em geral foram: 1) Adicionar a referencia da use DynLibs nos métodos SafeLoadLibrary e LoadLybrary, pois no meu caso, os métodos estavam sendo chamados da unit sysutilh.inc e por algum motivo o método da sysutilh.inc não foi capaz de fazer o "load" das bibliotecas .so, as alterações foram as seguintes DynLibs.SafeLoadLibrary DynLibs.LoadLibrary 2) Em algumas chamadas GetProcAddress havia um espaço na string do segundo parâmetro, por exemplo GetProcAddress(lHandle, '__xmlIndentTreeOutput ') Desta forma o método GetProcAddress retornava sempre um Handle nulo, então eu alterei as chamadas retirando o espaço no final da string e mais um passo foi conquistado. GetProcAddress(lHandle, '__xmlIndentTreeOutput') Estou anexando as units alteradas caso o Messeias julgue necessário alterar no Git Agora estou enfreando um problema e não por onde começar na linha abaixo if (xmlSecCryptoDLLoadLibrary('openssl') < 0) then Sempre recebo a exceção de que não foi possivel carregar a xmlsec-crypto. Já tentei configurar o LD_LIBRARY_PATH e rever a instalação do xmlsec. Inclusive, tentei também baixar os fontes das libs e compilar na tentativa de sucesso, mas não obtive. Se alguém tiver alguma ideia ou já passou por isso, toda ajuda é bem vinda. Estou usando Estou usando ubuntu 15.10 64-bits, Lazarus 1.4.0+dfsg-5, FPC 2.6.4. Abraços, libexslt.pas libxml2.pas libxmlsec.pas libxslt.pas André Medeiros
Fundadores Daniel Simoes Postado 23 Dezembro, 2015 Fundadores Postado 23 Dezembro, 2015 As alterações foram testadas em Lazarus Linux/Windows, e Delphi 7 - XE ? Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
almp1 Postado 23 Dezembro, 2015 Postado 23 Dezembro, 2015 Olá Daniel, Ainda não testei nos outros ambientes pois ainda não tive sucesso no envio da NFe. Quando completar todos os testes irei verificar em outros ambientes também e posto os resultados aqui. Abraços, André Medeiros
almp1 Postado 29 Dezembro, 2015 Postado 29 Dezembro, 2015 Em 03/11/2015 at 11:49, messiashenrique disse: Olá Daniel, bom dia e obrigado. Então, Daniel, antes cheguei a pensar isso também... Mas fiz um pequeno teste e vi que o problema não é ao carregar a Lib e sim ao criar a parte gráfica com lib carregada. Da forma que está, a lib é carregada em um handle no início da execução do método e logo depois é liberada. Fiz esse teste em um form mesmo e vi que dava certo. Então acreditei que ia funcionar também com o componente. Veja as imagens em anexo Att. Messias Henrique Agora precisamos testar em outros ambientes (principalmente Windows com Delphi - que não tenho aqui). Acredito que funcione, mas é bom testar! Att. Messias Henrique Olá Messias, tudo bem ? Estou usando um ambiente similar ao seu Ubuntu 15.10 64, Lazarus 1.4.4, FPC 2.6.4, e ACBr do Trunk2. Substitui as libs do ACBrSSL pelas suas, e cheguei no mesmo resultado que o seu. Porém no momento de assinar a nota, encontro um problema na function xmlSecCryptoDLLoadLibrary, quando passamos pela linha Result := DoGetxmlSecCryptoDLLoadLibrary(crypto); recebemos uma exceção 'External: SIGSEGV'; Infelizmente não consigo passar deste ponto, também não temos como debugar isso. Uma curiosidade é que quando usamos as bibliotecas baixando os fontes e compilando localmente, não é gerada exceção mas a função retorna (-1). Você consegue assinar a nota? Você poderia me dar uma dica de como continuar a partir daqui ? Abraços Abraços, André Medeiros
messiashenrique Postado 9 Janeiro, 2016 Autor Postado 9 Janeiro, 2016 (editado) Em 29/12/2015 at 16:54, almp1 disse: Olá Messias, tudo bem ? Estou usando um ambiente similar ao seu Ubuntu 15.10 64, Lazarus 1.4.4, FPC 2.6.4, e ACBr do Trunk2. Substitui as libs do ACBrSSL pelas suas, e cheguei no mesmo resultado que o seu. Porém no momento de assinar a nota, encontro um problema na function xmlSecCryptoDLLoadLibrary, quando passamos pela linha Result := DoGetxmlSecCryptoDLLoadLibrary(crypto); recebemos uma exceção 'External: SIGSEGV'; Infelizmente não consigo passar deste ponto, também não temos como debugar isso. Uma curiosidade é que quando usamos as bibliotecas baixando os fontes e compilando localmente, não é gerada exceção mas a função retorna (-1). Você consegue assinar a nota? Você poderia me dar uma dica de como continuar a partir daqui ? Abraços Olá @almp1, tudo bem sim e você? Então, desculpe-me pela demora... Estes dias estive ausente desse universo... (rsrsr). Só agora vi suas mensagens. Vou voltar a mexer nesse projeto a partir da semana que vem. Quem sabe a gente consegue descobrir o que se passa... Em um passado não muito distante, eu tive que improvisar nesse projeto e fiz uma gambiarra (argh!) onde eu gerava o xml pelo ACBr e depois validava e assinava pela através dos executáveis xmlsec1 e openssl (usando o TProcess) . Mas isso é horrível e acredito que é possível fazer tudo pela lib mesmo. No entanto, não cheguei a tentar dessa última vez... Embora, provavelmente, irei esbarrar no mesmo problema que você. Dessa vez estou mais otimista... Assim que tiver iniciado os testes volto aqui para dar um parecer, ok? Att. Messias Henrique Em 24/11/2015 at 12:32, EMBarbosa disse: Se ela é baseada no projeto libxml2-pas, o @messiashenrique poderia enviar um push-request diretamente para eles. O que acha messiashenrique? Olá @EMBarbosa, tudo bem, né? Desculpe-me pela demora ao responder... Estive ausente alguns dias... Então, acho que ainda temos que ajustar algumas coisinhas.... Assim que conseguirmos corrigir alguns detalhes, vou sim tentar entrar em contato com o pessoal do libxml2-pas para sugerir as mudanças... (embora tenho a impressão - só a impressão mesmo - que o projeto está meio parado). Enfim, não custa nada tentar! Att. Messias Henrique Editado 9 Janeiro, 2016 por messiashenrique 1
Moderadores Juliomar Marchetti Postado 9 Janeiro, 2016 Moderadores Postado 9 Janeiro, 2016 O problema que ocorre é com o Lazarus e o código que faz a parte do openssl em 64! tem que ser corrigido nele se for o ACBr vai compilar e funcionar sem problemas! mas o problema está nas units do lazarus com openssl em 64 bits terá que enviar uma correção ou sugerir a mesma para ser acatada pela comunidade Lazarus Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
almp1 Postado 21 Julho, 2016 Postado 21 Julho, 2016 Olá Amigos, Estou retomando este assunto, pois o uso da NFe em ambiente Linux64 me interessa muito, e acredito que deva interessar a outros colegas que usam o ACBr. Entrei em contato com o Petr que desenvolveu a libxml2-pascal https://sourceforge.net/projects/libxml2-pas/ e a resposta dele foi a seguinte. Hello Andre, I stopped maintenance of the libxml2-pas library for about 12 years ago, and I myself do no longer work neither actively use any flavor of Pascal. Actually, it would be surprising for me if the code was still usable.... I am afraid that there is only one thing you can do - your own research :( Anyway, thanks for contacting me. Good luck, Petr Ai entendi o motivo do pacote ACBrOpenSSL ter o seu próprio fonte libxml2.pas, já que ele é uma peça fundamental para o uso do ACBr com OpenSSL. Sei que já houve um avanço nas DLLs para Windows usando a Libxml2-2. ftp://xmlsoft.org/libxml2/win32/64bit/ Vou fazer alguns testes usando a codificação do Messias Henrique https://github.com/messiashenrique/xmlsec4pascal e atualizando os pacotes da biblioteca para ultima versão da libxml que é a 2.9.4. Percebi que a libxml2.pas foi criada baseada na versão 2.7.3 que é de 2009. (já foram 7 anos). Também foram disponibilizados as versões 1.6 do Lazarus e 3.0 da FPC. Acho que já houve alguma evolução Se alguém tiver alguma ideia, duvida, sugestão fico a disposição para podermos usar também a assinatura da NFe em Linux64 Abraços, André Medeiros
mdbs99 Postado 21 Julho, 2016 Postado 21 Julho, 2016 Legal o mantenedor original do projeto ter respondido! Mas é deprimente quando ele diz que não atualiza a 12 anos e nem utiliza mais Pascal. Isso é um grande problema. Qualquer alteração na libxml2 não será replicada para a versão Pascal, pois o projeto morreu (caso ninguém tenha assumido). A primeira coisa a fazer é procurar um fork do projeto no SorceForge ou Git e saber se alguém continuou o projeto. Ou se o pessoal do ACBr assumiu ou irá assumir esse fork. Marcos Douglas B. Santoswww.ObjectPascalProgramming.com
Fundadores Daniel Simoes Postado 21 Julho, 2016 Fundadores Postado 21 Julho, 2016 Na verdade usamos poucas funções da LibXmlSec... e para o que precisamos, ela parece estar se comportando bem... Acho que o ideal, seria criar um novo .PAS, nosso, carregando de forma dinâmica (e não estática), apenas os métodos que precisamos... 1 Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
almp1 Postado 21 Julho, 2016 Postado 21 Julho, 2016 Olá Daniel, Gosto desta linha de pensamento, A principio, se não houver, vou mapear apenas as funções que são necessárias para o ACBr para "enxugar" os fontes libxmlsec, libxml2, libxslt. Vou tentar esboçar alguma coisa pensado em economia e compatibilidade no Linux 64 e vou postando aqui. Abraços, 1 André Medeiros
Consultores EMBarbosa Postado 21 Julho, 2016 Consultores Postado 21 Julho, 2016 1 hora atrás, mdbs99 disse: A primeira coisa a fazer é procurar um fork do projeto no SorceForge ou Git e saber se alguém continuou o projeto. Se procurar talvez até encontramos... https://github.com/ak47morozov/Delphi-Libxml2 27 minutos atrás, almp1 disse: Olá Daniel, Gosto desta linha de pensamento, A principio, se não houver, vou mapear apenas as funções que são necessárias para o ACBr para "enxugar" os fontes libxmlsec, libxml2, libxslt. Vou tentar esboçar alguma coisa pensado em economia e compatibilidade no Linux 64 e vou postando aqui. Abraços, Talvez isso nos leve a conseguirmos uma alternativa em que nem precisemos da dll. 1 []'s Elton Profissionalize o ACBr na sua empresa, conheça o ACBr Pro. (15) 2105-0750 (15)99790-2976. Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas. Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
mdbs99 Postado 21 Julho, 2016 Postado 21 Julho, 2016 8 minutos atrás, EMBarbosa disse: Se procurar talvez até encontramos... https://github.com/ak47morozov/Delphi-Libxml2 Legal. Mas não esqueçam do FreePascal! De qualquer forma já é um bom começo. 1 Marcos Douglas B. Santoswww.ObjectPascalProgramming.com
Consultores EMBarbosa Postado 21 Julho, 2016 Consultores Postado 21 Julho, 2016 Agora, mdbs99 disse: Legal. Mas não esqueçam do FreePascal! Não esqueci, só citei um exemplo. Nem comparei com o fonte do Messias Henrique citado no tópico... Na verdade, ACBrMonitorPlus é compilado atualmente em Lazarus. Qualquer quebra neste respeito não poderá ser tolerada. 2 []'s Elton Profissionalize o ACBr na sua empresa, conheça o ACBr Pro. (15) 2105-0750 (15)99790-2976. Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas. Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
mdbs99 Postado 21 Julho, 2016 Postado 21 Julho, 2016 Perfeito. 1 Marcos Douglas B. Santoswww.ObjectPascalProgramming.com
almp1 Postado 24 Julho, 2016 Postado 24 Julho, 2016 Em 21/07/2016 at 14:18, mdbs99 disse: Legal. Mas não esqueçam do FreePascal! De qualquer forma já é um bom começo. Olá amigos, Só para dar um report, testei a biblioteca https://github.com/ak47morozov/Delphi-Libxml2 no DelphiX2 foi tranquilo, mas no Lazarus 1.4.4 fom FPC 2.6.4 No Windows deu muito problema, nem me estendi para testes no Linux. Porém fiz algumas alterações no ACBrOpenSSL e o funcionamento tanto no Delphi quanto Lazaus Windows funcionaram perfeitamente, vou fazer testes no Linux para ver o comportamento e se tudo der certo posto os resultados aqui. Abraços André Medeiros
Fundadores Daniel Simoes Postado 25 Julho, 2016 Fundadores Postado 25 Julho, 2016 Aparentemente esse projeto está sem manutenção... Citar libxml2.pas [x] Fix some errors PChar -> PAnsiChar for xsd schema validations. 3 years ago 1 Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora