Definir o que aceita duplicado no linqueditor

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir o que aceita duplicado no linqueditor

Mensagem por JoséQuintas »

Por default o mingw não aceita funções repetidas.
Até certo momento era o que eu usava, isso era bom.

Agora uso permitindo duplicar, igual blinker, isso não é muito bom.

Existe uma opção intermediária ?
Do tipo eu poder definir o que vai aceitar repetido ?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Definir o que aceita duplicado no linqueditor

Mensagem por alxsts »

Olá!
JoséQuintas escreveu:Agora uso permitindo duplicar, igual blinker, isso não é muito bom.
Não entendi nada...

Pelo que sei, funções repetidas (com o mesmo nome, independentemente dos parâmetros) não são permitidas em xBase... em outras linguagens isto é possível desde que as assinaturas (quantidade e tipo dos parâmetros) sejam diferentes.

Poderia exemplificar?
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir o que aceita duplicado no linqueditor

Mensagem por JoséQuintas »

Lembrei do chatGPT mas não resolveu.

Compilação normal aqui:

Código: Selecionar todos

Harbour 3.2.0dev (r2410180556)
Copyright (c) 1999-2024, https://harbour.github.io/
d:/harbour/comp/mingw32/bin/../lib/gcc/i686-w64-mingw32/14.2.0/../../../../i686-w64-mingw32/bin/ld.exe: d:/github/fivewin/lib\fivehg.lib(errsysw.o):errsysw.c:(.text+0x3a): multiple definition of `HB_FUN_ERRORSYS'; c:/temp/errorsys.o:errorsys.c:(.text+0x80): first defined here
d:/harbour/comp/mingw32/bin/../lib/gcc/i686-w64-mingw32/14.2.0/../../../../i686-w64-mingw32/bin/ld.exe: d:/github/fivewin/lib\fivehg.lib(errsysw.o):errsysw.c:(.text+0x1a2): multiple definition of `HB_FUN_HB_GTSYS'; c:/temp/jpa.o:jpa.c:(.text+0xe0): first defined here
d:/harbour/comp/mingw32/bin/../lib/gcc/i686-w64-mingw32/14.2.0/../../../../i686-w64-mingw32/bin/ld.exe: d:/github/fivewin/lib\fivehg.lib(printer.o):printer.c:(.text+0x580): multiple definition of `HB_FUN_PRINTBEGIN'; d:/fontes/integra/libjpa/lib\liblibjpa.a(ze_print.o):(.text+0x0): first defined here
d:/harbour/comp/mingw32/bin/../lib/gcc/i686-w64-mingw32/14.2.0/../../../../i686-w64-mingw32/bin/ld.exe: d:/github/fivewin/lib\fivehg.lib(printer.o):printer.c:(.text+0x5da): multiple definition of `HB_FUN_PRINTEND'; d:/fontes/integra/libjpa/lib\liblibjpa.a(ze_print.o):(.text+0x20): first defined here
d:/harbour/comp/mingw32/bin/../lib/gcc/i686-w64-mingw32/14.2.0/../../../../i686-w64-mingw32/bin/ld.exe: d:/github/fivewin/lib\fivehgc.lib(msgs.o):msgs.c:(.text+0x4c2): multiple definition of `HB_FUN_MSGSTOP'; d:/fontes/integra/libjpa/lib\liblibjpa.a(ze_messagebox.o):(.text+0x60): first defined here
d:/harbour/comp/mingw32/bin/../lib/gcc/i686-w64-mingw32/14.2.0/../../../../i686-w64-mingw32/bin/ld.exe: d:/github/fivewin/lib\fivehgc.lib(msgs.o):msgs.c:(.text+0x4ec): multiple definition of `HB_FUN_MSGYESNO'; d:/fontes/integra/libjpa/lib\liblibjpa.a(ze_messagebox.o):(.text+0x0): first defined here
d:/harbour/comp/mingw32/bin/../lib/gcc/i686-w64-mingw32/14.2.0/../../../../i686-w64-mingw32/bin/ld.exe: d:/github/fivewin/lib\fivehgc.lib(strtoken.o):strtoken.c:(.text+0x15c): multiple definition of `HB_FUN_STRTOKEN'; d:/harbour/lib/win/mingw\libhbmisc.a(stringsx.o):(.text+0x80): first defined here
d:/harbour/comp/mingw32/bin/../lib/gcc/i686-w64-mingw32/14.2.0/../../../../i686-w64-mingw32/bin/ld.exe: d:/github/dlgauto/source\libdlgautohwgui.a(lib_hwgui.o):(.text+0x4a0): multiple definition of `HB_FUN_ADOSKIPPER'; d:/github/dlgauto/source\libdlgautofivewin.a(lib_fivewin.o):(.text+0x500): first defined here
d:/harbour/comp/mingw32/bin/../lib/gcc/i686-w64-mingw32/14.2.0/../../../../i686-w64-mingw32/bin/ld.exe: d:/github/hwgui/lib\libhwgui.a(nice.o):(.text+0x240): multiple definition of `Gradient'; d:/github/fivewin/lib\fivehgc.lib(brushes.o):brushes.c:(.text+0xd10): first defined here
collect2.exe: error: ld returned 1 exit status
hbmk2[JPA]: Error: Running linker. 1

Então estou usando este:

Código: Selecionar todos

-ldflags=-Wl,--allow-multiple-definition -s -static

É ruim, porque vai aceitar qualquer coisa duplicada.

Queria fixar só nessas funções já conhecidas.

chatGPT mostrou algumas, mas são para o obj compilado, não pra funções isoladas.

-Wl,--whole-archive -lnomelib
-Wl, --no-whole-archive -lnomelib
-z muldefs -lnomelib
--wrap=minhafuncao -lminhalib

Mexer com a lib:
ar x arquivolib
ar rcs novalib *.o

Ainda não testei isto:
2. Renomear o Símbolo com objcopy
Depois de identificar o sub-objeto com o símbolo conflituante, você pode usar objcopy para renomear o símbolo. Por exemplo, suponha que o sub-objeto objeto_conflitante.o contenha o símbolo minhaFuncao que você deseja renomear para minhaFuncao_renomeada:

bash
Copiar código
objcopy --redefine-sym minhaFuncao=minhaFuncao_renomeada objeto_conflitante.o
Este comando cria uma nova versão de objeto_conflitante.o onde minhaFuncao foi renomeada para minhaFuncao_renomeada.

3. Recriar a Biblioteca
Após renomear os símbolos desejados nos sub-objetos, recrie a biblioteca com o comando ar:

bash
Copiar código
ar rcs nova_biblioteca.a *.o
Agora, nova_biblioteca.a conterá o símbolo minhaFuncao_renomeada em vez de minhaFuncao, evitando conflitos com outras bibliotecas que possam ter o símbolo minhaFuncao.
É verdadeiro.
Vou usar GTWVG + HWGUI + FIVEWIN no aplicativo.
Tudo pronto pra colocar em prática.
E não estou a fim de mexer nem na minha lib, e nem em lib nenhuma.

Pelo menos a ordem de linquedição já ajudou.

Também tem a gambiarra do debug do harbour renomeado, porque o hbmk2 não aceita indicar lib do harbour diretamente.
Ao mudar o nome externo da lib, tudo bem, coloco em primeiro, pra bloquear o debug do fivewin.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Definir o que aceita duplicado no linqueditor

Mensagem por rochinha »

Amiguinhos,

JoseQuintas
Você não está usando static functions? existe esta possibilidade em seu ambiente?

Uma Static Function é reconhecida somente dentro do .PRG em que ela está, então se uma função de mesmo nome, mesmo que identica na operação ou não não conflitará com outra em outro .PRG.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir o que aceita duplicado no linqueditor

Mensagem por JoséQuintas »

rochinha escreveu:Você não está usando static functions? existe esta possibilidade em seu ambiente?
MsgYesNo(), MsgStop(), PrintBegin(), PrintEnd()
Usadas no aplicativo inteiro.
Teria que criar milhares de funções static.
Pior ainda, ao alterar pra static, passa a entrar a função errada no lugar.

Se não tiver jeito, continua no duplicado mesmo, igual a todos os usuários do blinker e de libs GUI.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 166
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

Definir o que aceita duplicado no linqueditor

Mensagem por ivanil »

bom dia;
JoséQuintas escreveu:MsgYesNo(), MsgStop(), PrintBegin(), PrintEnd()
Usadas no aplicativo inteiro.
Teria que criar milhares de funções static.
Não necessariamente, use o xtranslate no topo do PRG que quer desviar para outra funcao;
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir o que aceita duplicado no linqueditor

Mensagem por JoséQuintas »

ivanil escreveu:Não necessariamente, use o xtranslate no topo do PRG que quer desviar para outra funcao;
De jeito nenhum.
Gambiarra em meus fontes nem pensar.
Fica só a gambiarra da linquedição mesmo, e EXE maior com coisa duplicada.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Definir o que aceita duplicado no linqueditor

Mensagem por rochinha »

Amiguinhos,

JoseQuintas
Se estas funções forem parte integrante de bibliotecas usadas nas linkagem fica dificil.

O que você pode fazer é criar um .PRG, criar funções wraper static destas funções padrão exemplo:

static JQ_MsgYesNo(), static JQ_MsgStop(), static JQ_PrintBegin(), static JQ_PrintEnd()

Chamar este .PRG via #include "wraper.prg"

Cada .PRG ao seu OBJetificado fará o include e compilará o .OBJ que na linkedição não causará duplicidade.

Ou quem sabe criar uma classe com chamadas INLINE destas funções.

Idéias.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 166
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

Definir o que aceita duplicado no linqueditor

Mensagem por ivanil »

Boa Noite;
ivanil escreveu:Gambiarra em meus fontes nem pensar.
Quando compartilhei a ideia sobre o uso de #xtranslate, achei que fosse algo que você ainda não tinha pensado, às vezes dá um branco, mas percebi um certo tom de desprezo, o que foi um pouco inesperado, especialmente considerando que a diretiva é amplamente usada no core do próprio Harbour. #xtranslate não é uma "gambiarra"; na verdade, ela foi desenhada para facilitar o pré-processamento e tornar o código mais eficiente e organizado, especialmente em macros que precisam de parâmetros.

Não comentarei mais suas publicações.

Grande abraço!
Anexos
2024-10-29_193315.png
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir o que aceita duplicado no linqueditor

Mensagem por JoséQuintas »

ivanil escreveu:. #xtranslate não é uma "gambiarra"; na verdade, ela foi desenhada para facilitar o pré-processamento e tornar o código mais eficiente e organizado, especialmente em macros que precisam de parâmetros.
Não comentarei mais suas publicações.
Sim, há outras situações aonde é muito útil.
Mas não dá pra alterar tudo por causa de uma lib, porque pode vir decepção de lib por aí.
Estou com um pé atrás com todas as LIBs.

Considero meu fonte mais importante do que qualquer lib.
Se tiver que mudar, vai ser a lib.

Depois... no futuro... quando uma LIB estiver realmente em uso... aí é outra história.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir o que aceita duplicado no linqueditor

Mensagem por JoséQuintas »

search.png
Expandindo sua contagem: 14.206 vezes

harbour, hmg 3, hwgui, hmg extended, fivewin, oohg, etc.

E tem coisa repetida em CHs diferentes, com coisa diferente, que nem faço idéia o que vai acontecer quando usar tudo junto.

Por exemplo nesse hb_compat.ch.
Porque mudar hb_Eol() pra hb_OsNewLine(), se é pra compilar xharbour no harbour, e não o contrário ? Não faz sentido.
E deve ter isso em muitas LIBs.
Pra certos casos, o xTranslate foi até pior.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Definir o que aceita duplicado no linqueditor

Mensagem por Kapiaba »

Quintas, o que você não entendeu, é que a sua falta de modéstia, está começando a irritar o(s) forums). Em alguns casos, você está sendo mal educado! Não é porquê você se tornou SENIOR em programação, que te dá o direito de tripudiar dos demais.

Simplesmente, se uma resposta não te serve, diga: OBRIGADO! Não é isso que eu preciso... etc. Não precisa ARROGÂNCIA!

No forum do FiveWin mundi, tem um sujeito de nome Silvio, que está no mesmo caminho, pense em uma mala sem alça.

Desculpe a sinceridade. Prefiro perder um AMIGO, do que não ser sincero.

Abs.

Regards, saludos.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir o que aceita duplicado no linqueditor

Mensagem por JoséQuintas »

Kapiaba escreveu:Quintas, o que você não entendeu, é que a sua falta de modéstia, está começando a irritar o(s) forums). Em alguns casos, você está sendo mal educado! Não é porquê você se tornou SENIOR em programação, que te dá o direito de tripudiar dos demais.
Não tem nada a ver uma coisa com a outra.
Dá pra ir longe com isso, mas vamos simplificar.

Qual o título do post ?
Modificar linquedição, alterar no linqueditor.
Mostrei até as tentativas que fiz.

Alguma resposta no assunto ?
Nada a ver com linquedição.

Quantas vezes é preciso repetir que é sobre linquedição e não sobre mexer nos fontes ?
Procurei dizer isso de várias formas diferentes, cada vez uma resposta mais direta.

falta de modéstia ?
senior em programação ?
tripudiar os demais ?

Obrigado pelas respostas.
Não tem nada a ver o que perguntei, tentei mostrar isso mas piorou.

Repetindo também:
Resolvido. Fica como está.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Silvio Iovpatzo
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 31 Out 2024 13:42
Localização: São Paulo-SP

Definir o que aceita duplicado no linqueditor

Mensagem por Silvio Iovpatzo »

Rapaiz, essas mensagens é só agressão para cá e para lá, não tem gente racional por aqui? Tá doido gente?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir o que aceita duplicado no linqueditor

Mensagem por JoséQuintas »

Pois é, como eu disse, quanto mais explica só complica.
Estou explicando o ocorrido, continua sendo interpretado como agressão.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder