1

Hier soir j'essayais de compiler gloox AVEC gnutls. Je fais ça sous code::blocks. Je le compile pas en librairie, je le compile en .exe avec un petit main qui utilise les fonctions de la lib. Sans le support de TLS, donc sans GNUTLS, je compile et ça marche.
Avec GNUTLS:
quand je lui donne pas les .a de gnutls, 50 erros de link, normal. minutes, 5 seconds) 50 errors, 0 warnings  Quand je lui donne les .a, 50 erros de link. -------------- Build: Release Win32 in gloox --------------- Linking console executable: .\Release\gloox.exe src\lib\libgnutls.a(gnutls_global.o): In function `gnutls_global_init': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_global.c:234: undefined reference to `_gcry_control' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_global.c:243: undefined reference to `_gcry_check_version' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_global.c:251: undefined reference to `_gcry_set_allocation_handler' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_global.c:257: undefined reference to `_gcry_control' src\lib\libgnutls.a(gnutls_x509.o): In function `_gnutls_x509_privkey_to_gkey': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_x509.c:629: undefined reference to `_gcry_mpi_copy' src\lib\libgnutls.a(gnutls_dh_primes.o): In function `gnutls_dh_params_export_raw': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh_primes.c:625: undefined reference to `_gcry_mpi_get_nbits' src\lib\libgnutls.a(gnutls_dh_primes.o): In function `gnutls_dh_params_cpy': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh_primes.c:241: undefined reference to `_gcry_mpi_copy' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh_primes.c:242: undefined reference to `_gcry_mpi_copy' src\lib\libgnutls.a(gnutls_dh_primes.o): In function `_gnutls_dh_generate_prime': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh_primes.c:81: undefined reference to `_gcry_prime_generate' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh_primes.c:92: undefined reference to `_gcry_prime_check' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh_primes.c:107: undefined reference to `_gcry_prime_group_generator' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh_primes.c:78: undefined reference to `_gcry_prime_release_factors' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh_primes.c:130: undefined reference to `_gcry_prime_release_factors' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh_primes.c:115: undefined reference to `_gcry_prime_release_factors' src\lib\libgnutls.a(gnutls_buffers.o): In function `_gnutls_read': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_buffers.c:318: undefined reference to `_WSAGetLastError@0' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_buffers.c:333: undefined reference to `_WSASetLastError@4' src\lib\libgnutls.a(gnutls_buffers.o): In function `_gnutls_io_write_buffered': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_buffers.c:784: undefined reference to `_WSAGetLastError@0' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_buffers.c:799: undefined reference to `_WSASetLastError@4' src\lib\libgnutls.a(debug.o): In function `_gnutls_dump_mpi': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/debug.c:125: undefined reference to `_gcry_mpi_print' src\lib\libgnutls.a(gnutls_dh.o): In function `gnutls_calc_dh_key': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh.c:112: undefined reference to `_gcry_mpi_get_nbits' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh.c:119: undefined reference to `_gcry_mpi_get_nbits' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh.c:119: undefined reference to `_gcry_mpi_new' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh.c:122: undefined reference to `_gcry_mpi_powm' src\lib\libgnutls.a(gnutls_dh.o): In function `gnutls_calc_dh_secret': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh.c:53: undefined reference to `_gcry_mpi_get_nbits' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh.c:64: undefined reference to `_gcry_mpi_new' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh.c:79: undefined reference to `_gcry_mpi_randomize' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh.c:83: undefined reference to `_gcry_mpi_cmp_ui' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh.c:85: undefined reference to `_gcry_mpi_get_nbits' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh.c:85: undefined reference to `_gcry_mpi_new' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_dh.c:96: undefined reference to `_gcry_mpi_powm' src\lib\libgnutls.a(gnutls_rsa_export.o): In function `gnutls_rsa_params_export_raw': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:355: undefined reference to `_gcry_mpi_get_nbits' src\lib\libgnutls.a(gnutls_rsa_export.o): In function `_gnutls_rsa_generate_params': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:68: undefined reference to `_gcry_sexp_build' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:76: undefined reference to `_gcry_pk_genkey' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:77: undefined reference to `_gcry_sexp_release' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:85: undefined reference to `_gcry_sexp_find_token' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:93: undefined reference to `_gcry_sexp_nth_mpi' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:94: undefined reference to `_gcry_sexp_release' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:96: undefined reference to `_gcry_sexp_find_token' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:104: undefined reference to `_gcry_sexp_nth_mpi' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:105: undefined reference to `_gcry_sexp_release' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:107: undefined reference to `_gcry_sexp_find_token' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:115: undefined reference to `_gcry_sexp_nth_mpi' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:116: undefined reference to `_gcry_sexp_release' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:118: undefined reference to `_gcry_sexp_find_token' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:126: undefined reference to `_gcry_sexp_nth_mpi' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:127: undefined reference to `_gcry_sexp_release' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:130: undefined reference to `_gcry_sexp_find_token' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:138: undefined reference to `_gcry_sexp_nth_mpi' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:139: undefined reference to `_gcry_sexp_release' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_rsa_export.c:142: undefined reference to `_gcry_sexp_find_token' Process terminated with status 1 (0  ss terminated with status 1 (0 minutes, 1 seconds) 4 errors, 0 warnings   Quand je donne au linker DEUX FOIS ca donne 4 errors de link (2 x 2 en fait) -------------- Build: Release Win32 in gloox --------------- Linking console executable: .\Release\gloox.exe src\lib\libgnutls.a(gnutls_buffers.o): In function `_gnutls_read': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_buffers.c:318: undefined reference to `_WSAGetLastError@0' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_buffers.c:333: undefined reference to `_WSASetLastError@4' src\lib\libgnutls.a(gnutls_buffers.o): In function `_gnutls_io_write_buffered': /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_buffers.c:784: undefined reference to `_WSAGetLastError@0' /home/jas/gnutls4win/build/gnutls-2.4.1/lib/../../../src/gnutls-2.4.1/lib/gnutls_buffers.c:799: undefined reference to `_WSASetLastError@4' collect2: ld returned 1 exit status Proce

que faire?
Tout ce qui passe pas par le port 80, c'est de la triche.

2

Pour le premier problème, il faut passer les .a dans le bon ordre. Pour le deuxième, il faut linker avec la bonne lib système, probablement ws2_32 ou un truc comme ça.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

Et pour le 3ieme si tu as une dependance ciculaire, il faut que tu les passes 2 fois...

4

5

(ce que je ne comprends pas, c'est pourquoi Onur continue à vouloir utiliser des softs open-source alors qu'il déteste ça... ou alors c'est pour le plaisir de pouvoir troller après cheeky )
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

6

C'est quoi ce foutage de gueule? Quand il y a n .a à ajouter, il faut tester les n! combinaisons possibles et linker 2~3 fois de suite au cas où ca chierait encore??????????????????? Remarque comme ça on profite du fait que O(3*n!) == O(n!) tritop

En tout cas c'est reglé: j'ai compilé avec Visual Studio et OpenSSL (dont j'en ai chié pour trouver les .lib).
Question à propos: le rapport entre .lib et .a ?

Je regarderai aussi avec gcc et les .a quand j'aurai un jour de ma vie à perdre.
J'utilise du code source libre, car à chaque fois je me dis: "allez tu as été déçu jusqu'à maintenant, fais un effort." et une demi-heure après BAM.
Franchement avec des outils pareil, faut pas pleurnicher que personne n'utilise linux ou autres joyeuseutés libres...
Tout ce qui passe pas par le port 80, c'est de la triche.

7

non mais si tu sais pas comment marche un linker on y peut rien. Et si VC++ te permet de compiler des dependances cyclique sans t'en rendre compte et bien bravo..

8

Que vous ayez un linker qui sux, soit. Mais la moindre des choses dans ces cas là, c'est de donner l'ordre des .a à donner au linker. C'est pas parce que c'est open source que tout le monde va s'amuser à regarder dans le code pour trouver les dépendances entre les différents fichiers .a...
Tout ce qui passe pas par le port 80, c'est de la triche.

9

JackosKing (./7) :
Et si VC++ te permet de compiler des dependances cyclique sans t'en rendre compte et bien bravo..

Bah, ld-tigcc permet ça en tout cas. tongue

Mais GNU ld permet les dépendances cycliques avec --start-group et --end-group, ou -( et -) pour les paresseux.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

10

onur (./8) :
Que vous ayez un linker qui sux, soit. Mais la moindre des choses dans ces cas là, c'est de donner l'ordre des .a à donner au linker. C'est pas parce que c'est open source que tout le monde va s'amuser à regarder dans le code pour trouver les dépendances entre les différents fichiers .a...

À mon avis, c'est fait pour le linkage dynamique, et avec les .so sous GNU/Linux on n'a pas ce problème vu que les dépendances sont résolues dans les 2 sens, c'est pour ça que l'ordre de dépendance n'est pas documenté.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

11

Ok c'est code::blocks qui met pas cette option par défaut alors. Au fait, y en a qui savent comment on fait afficher la ligne de commande effectivement executé dans code::blocks? Parce qu'il envoie le verbose des outils qu'il appelle mais il montre pas la ligne qui a donné l'ordre.
Tout ce qui passe pas par le port 80, c'est de la triche.

12

onur (./11) :
Ok c'est code::blocks qui met pas cette option par défaut alors.

Parce que normalement on n'en a pas besoin, il suffit de mettre les libs dans le bon ordre. En général, le bon ordre, c'est la lib principale en dernier.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

13

10> dans settings>compiler> onglet other settings à droite, y'a un combo "compiler logging"

14

Visual ne se soucie pas de l'ordre des libs pour compiler les dépendances, mais cela provoque un problème inverse: Si deux bibliothèques exportent deux fonctions du même nom, Visual crie au conflit et reporte une erreur au lieu de sélectionner silencieusement la première.

Ce qui rend impossible l'utilisation de fonctions "facultatives" comme pour lex (où le main() est supposé être facultatif, gcc utilisant celui de la lib de lex si l'utilisateur n'en a pas fourni)...
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

15

Dans ld-tigcc, tout marche. tongue
* Les libraries peuvent être spécifiées dans n'importe quel ordre.
* S'il y en a 2 qui exportent la même fonction, ld-tigcc en choisira une au hasard (normalement la première spécifiée) et ne dira rien. (Les définitions en double ne sont pas une erreur pour ld-tigcc.)
* Si on définit la fonction dans un .o (ou un .c ou .s ou .asm - pour ld-tigcc, ce sont tout des .o vu qu'il ne les reçoit que sous cette forme), cette fonction sera toujours prioritaire par rapport à une fonction dans un .a (sauf si le fichier objet du .a (je rappelle qu'un .a est une archive de .o) la contenant est linké pour une autre fonction, et même dans ce cas, normalement le .o sera utilisé de préférence).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité