1

je travaille sur une librairie de fonctions qui utilise elle meme une autre librairie:libpq.a (utilisation d'une DB postgres depuis un programme en C)

J'ai de gros problèmes lorsque je dois compiler ma librairie, et ensuite compiler un programme qui utilise cette librairie.

J'ai reussi à faire un makefile qui arrive à faire compiler ma lib(ftmlib.a), mais je n'arrive pas à inclure cette lib dans un programme.

en gros:
ftmlib.a depend de libpq.a
mon_programme.c depend de ftmlib.a et libpq.a

comment puis je faire comprendre à gcc que je veux compiler mon_programme.c en utilisant ftmlib.a et libpq.a?


2

gcc mon_programme.c ftmlib.a libpq.a ?

3

gcc testnico3.c -o testnico3 /usr/lib/libpq.a /home/nicolas_ab/smartcvs/ftmaster/54/outils/ftmlib.a
/usr/lib/libpq.a(fe-misc.o)(.text+0x109f): In function `pqSocketCheck':
: undefined reference to `SSL_pending'
/usr/lib/libpq.a(fe-secure.o)(.text+0x6a): In function `pqsecure_open_client':
: undefined reference to `SSL_new'
/usr/lib/libpq.a(fe-secure.o)(.text+0x86): In function `pqsecure_open_client':
: undefined reference to `SSL_set_ex_data'
/usr/lib/libpq.a(fe-secure.o)(.text+0xe1): In function `pqsecure_open_client':
: undefined reference to `SSL_set_fd'
.... (y en a encore plein)

le compilateur se comporte comme si il y avait des erreurs de liens dans la lib libpq.a (ce dont je doute tres fortement,postgres est quand meme un projet qui fonctionne)

je pete un boullard, ce truc est en train de me rendre dingue.

Je pense que la compilation de ma librairie (ftmlib.a) est foireuse, et qu'elle me fait echouer autre chose plus loin.

je vais tout reprendre de zero, au calme, et sans tout ces makefile autogénéré qui me mettent un paté pas croyable.au moins, avec gcc en ligne de commande, on sait ce qu'on fait. #pataper#





4

J'ai dit :

gcc mon_programme.c ftmlib.a libpq.a

et pas

gcc mon_programme.c libpq.a ftmlib.a

Bref:


gcc testnico3.c -o testnico3 /home/nicolas_ab/smartcvs/ftmaster/54/outils/ftmlib.a /usr/lib/libpq.a

5

merde, ya une difference ?!? couic

Mais sinon, je pense que j'ai trouvé une erreur, le temps de veriifier et de re teser ...

6

pkoi pas -lpq plutôt que /usr/lib/libpq.a ?

Et sinon, y a moyen de gérer des .a avec des références croisées ? switch, .a en double, ... ?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

7

>ya une difference ?!?
oui Erreur classique.

>pkoi pas -lpq plutôt que /usr/lib/libpq.a ?
Linker avec la lib statique plutot que dynamique par exemple ?

>Et sinon, y a moyen de gérer des .a avec des références croisées ? switch, .a en double, ... ?
Les references croisees entre les libraries, mais c'est vraiment mal et a proscrire totalement.

8

Pollux :
pkoi pas -lpq plutôt que /usr/lib/libpq.a ?

Et sinon, y a moyen de gérer des .a avec des références croisées ? switch, .a en double, ... ?


a noter que j'ai aussi utiliser qq jours avant le switch -lpq (c'etait marqué dans la doc de postgres :http://www.postgresql.org/docs/current/static/libpq-build.html)

Pollux>
je n'ai pas vraiment compris ce que faisait ce switch, mais il m'a permis de compiler des progs simple facilement (c'est à dire un fichier.c qui utilise la lib postgres, et voila)

PpHd>Justement, pour me prevalloir des dangers des references croisée dans les includes, j'ai voulu faire le malin et utiliser des constantes pour faire de la compilation conditionnelle, malheuresement, je me suis emmelé dans mes #ifdef, et les 3/4 de mon fichier.h etait ignoré par le préprocesseur (vous avez dit boulet???)
je viens de recompiler ma lib, je vais reesayer de compiler mon fichier.c, avec les options qui vont bien.

9

Linker avec la lib statique plutot que dynamique par exemple ?

càd, lequel va être statique et lequel dynamique ?
Les references croisees entre les libraries, mais c'est vraiment mal et a proscrire totalement.

J'arrive pas à parser ta phrase confus Le "mais" est en trop j'imagine ?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

10

> Le "mais" est en trop j'imagine ?
Oue surement. Mon GC a deja vire les informations necessaires a ta reponse.

11

fr rfej oipm

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

12

oki, j'ai recompiler ma lib comme ça:
ar -rv /home/nicolas_ab/smartcvs/ftmaster/54/outils/libsql.a /home/nicolas_ab/smartcvs/ftmaster/54/outils//ftm_postgres.c.o
r - /home/nicolas_ab/smartcvs/ftmaster/54/outils//ftm_postgres.c.o

libsql.a, c'est ma lib
ftm_postgres.c, c'est le fichier qui contient le code de mes fonctions

maintenant, lorsque je compile mon programme:

gcc -Wall -O2 -I/usr/include/pgsql -L/usr/lib/  -I/home/nicolas_ab/smartcvs/ftmaster/54/outils/  /home/nicolas_ab/smartcvs/ftmaster/54/outils//testnico3.c.o  -o /home/nicolas_ab/smartcvs/ftmaster/54/outils//exesql
/home/nicolas_ab/smartcvs/ftmaster/54/outils//testnico3.c.o(.text+0xb): In function `exit_nicely':
: undefined reference to `PQfinish'
/home/nicolas_ab/smartcvs/ftmaster/54/outils//testnico3.c.o(.text+0x43): In function `main':
: undefined reference to `PQconnectdb'
...


Le truc , c'est que ma librairie utilise ces fonctions, et que ça compile pour la librairie, mais pas pour mon programme.Je suis un peu paumé là...

13

Tu n'inclus aucune librarie.

Tu dois inclure les libraries dans l'ordre pour que le linkeur statique les trouve.

14

c'est un peu flou là.
par librairie, tu parle des fichier.h ou de fichier.a?


Comment je les inclues?

15

Les .a. Tu m'embrouilles c'est pourtant simple : dans la ligne de commande, tu mets libsql.a AVANT libpq.a .

16

ok.

17

basicman :
merde, ya une difference ?!? couic

Avec les linkers *nix oui. (Avec ld-tigcc non. tongue)
Tu peux dire à GNU ld de se comporter comme ld-tigcc en mettant: -Wl,--start-group libpq.a ftmlib.a -Wl,--end-group.
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é

18

merci!!

Justement, hier soir, j'ai commencer à regarder du coté des "-Wl,"....

19

Kevin m'a donné un bon tuyeau (bon, j'avais formulé ma question differemment aussi cheeky )

voir ici


En tout cas, maintenant, ça marche .

j'ai fait:
gcc -Os testnico3.c ftm_postgres.c -o testnico3 -lpq -ggdb


Merci à vous trois