Como resolver estos errores?

Iniciado por Borito30, 14 Marzo 2017, 14:21 PM

0 Miembros y 4 Visitantes están viendo este tema.

ivancea96

Antes de nada, me aprece raro que al generar la librería de esos errores. ¿Siempre te los dió?

Borito30

#11
Al final me devuelve este error cuando añado la libreria que es (hook.c) con todas sus .o ficheros de linkeado, y perdona por liarla tanto con tanto texto, me devuelve:
C:\Users\Androide\Desktop\minhook\Dynamic>g++ -o bot.exe Dynamic.o hook.o hde32.
o buffer.o trampoline.o
hook.o:hook.c:(.text+0x60b): undefined reference to `OpenThread'
hook.o:hook.c:(.text+0x69d): undefined reference to `OpenThread'
hook.o:hook.c:(.text+0xa2c): undefined reference to `InitializeBuffer'
hook.o:hook.c:(.text+0xa7d): undefined reference to `UninitializeBuffer'
hook.o:hook.c:(.text+0xb14): undefined reference to `IsExecutableAddress'
hook.o:hook.c:(.text+0xb27): undefined reference to `IsExecutableAddress'
hook.o:hook.c:(.text+0xb52): undefined reference to `AllocateBuffer'
hook.o:hook.c:(.text+0xb7c): undefined reference to `CreateTrampolineFunction'
hook.o:hook.c:(.text+0xca0): undefined reference to `FreeBuffer'
hook.o:hook.c:(.text+0xd82): undefined reference to `FreeBuffer'
C:/Program Files/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw
32/bin/ld.exe: hook.o: bad reloc address 0x13c in section `.rdata'
C:/Program Files/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw
32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status


Supongo que tendré que linkear tambien a la librería openthread añadiendo -lopenthread o algo así.

Con gloox se me soluciono los errores añadiendo el linkeado de estas librerias -lws2_32 -ldnsapi -lgdi32 -lcrypt32 -lsecur32 supongo será igual para este proyecto pero con otras librerias de linkeado.
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)

ivancea96

Prueba compilando como hacías antes así:
gcc -o bot.exe Dynamic.cpp -L"Direccion de la carpeta de los archivos de la librería" -lhook -lhde32 -lbuffer -ltrampoline

De todos modos, estaba leyendo y:
Código (cpp) [Seleccionar]
#pragma comment(lib, "MinHook.x64.lib")
Tienes eso en el código. Eso solo funciona en VC++. Y esa es otra, ¿tienes un .lib? Si tienes ese .lib, entonces prueba algo como:
gcc -o bot.exe Dynamic.cpp -L"Direccion de la carpeta de los archivos de la librería" -l"MinHook.x64"

En fin, si no te funciona nada de esto, mira información sobre la librería...

Borito30

#13
Me referia a esto(lo solucione así como indicastes solo añadiendo los linkeados):
-------------- Build: Debug in main (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe -Wall -fexceptions -g -IC:\openssl-1.0.1c_static_w32_mingw\include -IC:\openssl-1.0.1c_static_w32_mingw\include -IC:\Users\Androide\Desktop\gloox\src -c C:\Users\Androide\Desktop\main\main.cpp -o obj\Debug\main.o
mingw32-g++.exe -LC:\openssl-1.0.1c_static_w32_mingw -LC:\Users\Androide\Desktop\gloox -o bin\Debug\main.exe obj\Debug\main.o   C:\openssl-1.0.1c_static_w32_mingw\libcrypto.a C:\openssl-1.0.1c_static_w32_mingw\libssl.a C:\Users\Androide\Desktop\gloox\libgloox.a -lws2_32 -ldnsapi -lgdi32 -lcrypt32 -lsecur32


Me han recomendado usar cmake pero no se muy bien como compilar mi proyecto con cmake ya que usa una version antigua:
TDM-GCC 4.9.2 SJLJ (released in October 30, 2014),

Pero la cuestión es como usar cmake captura de cmake y mis ficheros:



Supongo que tendré que hacer un proyecto en codeblocks y compilarlo. Se supone que tengo que generar el makefile de mi proyecto con mingw creo y luego compilarlo con cmake que esta actualizado y no da estos problemas.
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)

Borito30

#14
Parece ser que el error open thread es resuelto usando la versión de msys que utiliza una versión mas actualizada. Me aparecen los mismos errores de undefined reference es decir del proyecto como los que resolvistes anteriormente:
$ g++ -o /c/Users/Androide/Desktop/minhook/Dynamic/Dynamic.exe /c/Users/Androide/Desktop/minhook/Dynamic/Dynamic.o /c/Users/Androide/Desktop/minhook/Dynamic/hook.o
C:/Users/Androide/Desktop/minhook/Dynamic/hook.o:hook.c:(.text+0xab6): undefined reference to `InitializeBuffer()'
C:/Users/Androide/Desktop/minhook/Dynamic/hook.o:hook.c:(.text+0xb07): undefined reference to `UninitializeBuffer()'
C:/Users/Androide/Desktop/minhook/Dynamic/hook.o:hook.c:(.text+0xba2): undefined reference to `IsExecutableAddress(void*)'
C:/Users/Androide/Desktop/minhook/Dynamic/hook.o:hook.c:(.text+0xbb1): undefined reference to `IsExecutableAddress(void*)'
C:/Users/Androide/Desktop/minhook/Dynamic/hook.o:hook.c:(.text+0xbec): undefined reference to `AllocateBuffer(void*)'
C:/Users/Androide/Desktop/minhook/Dynamic/hook.o:hook.c:(.text+0xc16): undefined reference to `CreateTrampolineFunction(_TRAMPOLINE*)'
C:/Users/Androide/Desktop/minhook/Dynamic/hook.o:hook.c:(.text+0xd3d): undefined reference to `FreeBuffer(void*)'
C:/Users/Androide/Desktop/minhook/Dynamic/hook.o:hook.c:(.text+0xe17): undefined reference to `FreeBuffer(void*)'
collect2.exe: error: ld returned 1 exit status



Supongo que se podrá resolver usando void en estos métodos como me dijistes anteriormente.

Te pongo el código de la librería:
http://rextester.com/GLAIG22887
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)

Borito30

Hola ivancea te he puesto el error actualizado que es de la librería pienso que se solucionara igual si tienes unos instantes fijate sino lo dejo asi. saludos y gracias.
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)

ivancea96

No, esos son errores del linker. Tienes que diferenciarlos. Cuando pone "ld returned 1" es error del linker ("ld" es el linker de GCC). Las undefined references también son del linker. "hook.o", está trabajando con el código objeto, ergo probablemente también sea del linker. ".text+0xab6", ".text" es una sección de un ejecutable, así que también implica linker.

En cualquier caso. Los errores de linker se solucionan linkeando bien las librerías, valga la redundacia. Intuyo que "InitializeBuffer" es una función de una librería. No veo que se la hayas indicado al compilar, con -L y/o -l.

Borito30

#17
Te pongo un ejemplo, tengo hasta el buffer creado .a:


Muchas gracias funciono. Os pongo el ultimo comando que teneis que poner:
g++ -o bot.exe Dynamic.o hook.o -L/c/Users/Androide/Desktop/minhook/Dynamic/ trampoline.a buffer.a hde32.a

Recordaros que codeblocks trae una versión antigua que a veces pues no incluye ciertas librerias por defecto y si actualizais evitais conflicto , gracias  ivancea por tu ayuda.
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)