Página 1 de 2

Definir o que aceita duplicado no linqueditor

Enviado: 28 Out 2024 17:48
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 ?

Definir o que aceita duplicado no linqueditor

Enviado: 28 Out 2024 18:12
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?

Definir o que aceita duplicado no linqueditor

Enviado: 28 Out 2024 20:53
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.

Definir o que aceita duplicado no linqueditor

Enviado: 29 Out 2024 01:57
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.

Definir o que aceita duplicado no linqueditor

Enviado: 29 Out 2024 07:46
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.

Definir o que aceita duplicado no linqueditor

Enviado: 29 Out 2024 08:17
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;

Definir o que aceita duplicado no linqueditor

Enviado: 29 Out 2024 09:04
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.

Definir o que aceita duplicado no linqueditor

Enviado: 29 Out 2024 12:46
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.

Definir o que aceita duplicado no linqueditor

Enviado: 29 Out 2024 19:47
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!

Definir o que aceita duplicado no linqueditor

Enviado: 29 Out 2024 21:34
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.

Definir o que aceita duplicado no linqueditor

Enviado: 29 Out 2024 21:48
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.

Definir o que aceita duplicado no linqueditor

Enviado: 31 Out 2024 10:36
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.

Definir o que aceita duplicado no linqueditor

Enviado: 31 Out 2024 12:36
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á.

Definir o que aceita duplicado no linqueditor

Enviado: 31 Out 2024 13:48
por Silvio Iovpatzo
Rapaiz, essas mensagens é só agressão para cá e para lá, não tem gente racional por aqui? Tá doido gente?

Definir o que aceita duplicado no linqueditor

Enviado: 31 Out 2024 15:10
por JoséQuintas
Pois é, como eu disse, quanto mais explica só complica.
Estou explicando o ocorrido, continua sendo interpretado como agressão.