Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

À propos de dbm #3001

Closed
vicuna opened this issue Oct 23, 2001 · 3 comments
Closed

À propos de dbm #3001

vicuna opened this issue Oct 23, 2001 · 3 comments
Labels

Comments

@vicuna
Copy link

vicuna commented Oct 23, 2001

Original bug ID: 594
Reporter: administrator
Status: closed
Resolution: fixed
Priority: normal
Severity: minor
Category: ~DO NOT USE (was: OCaml general)

Bug description

Les script configure (ocaml-3.03 mais 3.02 aussi) fait des choix un
peu bizarres pour trouver les includes/bibliothèque pour dbm.

il cherche ndbm.h dans '/usr/include' puis dans '/usr/include/gdbm'
puis '/usr/include/db1'.

Chez redhat, ndbm.h apparaît 2 fois : dans 'gdbm' (package gdbm-devel)
et dans 'db1' (package db1-devel). Donc configure choisit
'gdbm/ndbm.h'. Soit.

Mais ensuite, il teste '-lndbm' puis '-ldb1' mais pas '-lgdbm'. Or il
existe un 'libndbm.so' (package db2-devel), un 'libdb1.so' (package
db1-devel) et un 'libgdbm.so' (package gdbm-devel).

Résultat: si on a le package gdbm et pas les deux autres, configure ne
trouve pas la bibliothèque, et si on l'un des deux autres, ça marche
mais il n'utilise pas la bibliothèque correspondant au .h (peut-être
pas trés grave).

Ce que je comprends moins bien, c'est que si je veux compiler avec
ocamlopt un programme utilisant Dbm, j'obtiens :

$ ocamlopt -o test dbm.cmxa test.ml
/usr/bin/ld: cannot find -ldbm
collect2: ld returned 1 exit status
Error during linking
$

Et là je ne sais pas trop d'où il me sort le '-ldbm'.

Olivier

@vicuna
Copy link
Author

vicuna commented Oct 30, 2001

Comment author: administrator

Bonjour,

Les script configure (ocaml-3.03 mais 3.02 aussi) fait des choix un
peu bizarres pour trouver les includes/bibliothèque pour dbm.

il cherche ndbm.h dans '/usr/include' puis dans '/usr/include/gdbm'
puis '/usr/include/db1'.

Chez redhat, ndbm.h apparaît 2 fois : dans 'gdbm' (package gdbm-devel)
et dans 'db1' (package db1-devel). Donc configure choisit
'gdbm/ndbm.h'. Soit.

Mais ensuite, il teste '-lndbm' puis '-ldb1' mais pas '-lgdbm'. Or il
existe un 'libndbm.so' (package db2-devel), un 'libdb1.so' (package
db1-devel) et un 'libgdbm.so' (package gdbm-devel).

Résultat: si on a le package gdbm et pas les deux autres, configure ne
trouve pas la bibliothèque, et si on l'un des deux autres, ça marche
mais il n'utilise pas la bibliothèque correspondant au .h (peut-être
pas trés grave).

Effectivement, ce n'est pas très clair. Ndbm est une API que
plusieurs bibliothèques implémentent, dont GDBM (de GNU) et DB1 (de
SleepyCat Software), en plus de leur API native. Qui plus est, chaque
distribution Linux semble faire ses propres choix sur quelles
implémentations sont disponibles, dans quels répertoires, et avec
quels noms de bibliothèques. (Mon install Mandrake 7.2 ne ressemble
pas trop à ce que vous décrivez pour RedHat...)

Je vais modifier "configure" pour qu'il essaye aussi -lgdbm, et qu'il
teste les includes et les librairies dans le même ordre pour minimiser
les risques d'incohérence.

Mais de manière générale, c'est beaucoup d'effort pour une
bibliothèque OCaml que personne n'utilise :-)

Ce que je comprends moins bien, c'est que si je veux compiler avec
ocamlopt un programme utilisant Dbm, j'obtiens :

$ ocamlopt -o test dbm.cmxa test.ml
/usr/bin/ld: cannot find -ldbm
collect2: ld returned 1 exit status
Error during linking
$

Et là je ne sais pas trop d'où il me sort le '-ldbm'.

Essayez "ocamlopt -verbose -o test dbm.cmxa test.ml" pour vérifier,
mais je ne pense pas qu'ocamlopt passe une option -ldbm au linker C.
S'il le fait, c'est en effet très étrange; assurez-vous d'avoir une
install Caml à jour (sans vieux fichiers qui pourraient traîner d'une
ancienne install). S'il ne le fait pas, c'est un problème
d'installation de votre système: e.g. la lib ndbm déclare dépendre de
la lib dbm et cette dernière n'est pas trouvée.

  • Xavier Leroy

@vicuna
Copy link
Author

vicuna commented Oct 30, 2001

Comment author: administrator

Updated detection of NDBM in configure script. The whole issue remains unclear.
XL, 2001-10-30

@vicuna vicuna closed this as completed Oct 30, 2001
@vicuna
Copy link
Author

vicuna commented Oct 30, 2001

Comment author: administrator

Aïe, si, moi je l'utilise. Vous suggérez quoi à la place ?

Bon, bon, ça prouve que ça vaut la peine de "maintenir" cette
bibliothèque, alors :-)

En fait il manque qqch dans 'otherlibs/dbm/Makefile' :

dbm.cmxa: dbm.cmx
$(MKLIB) -ocamlopt '$(CAMLOPT)' -o dbm dbm.cmx $(DBM_LINK)

il faut rajouter : '-oc mldbm'

Bien vu, bravo à vous et mes excuses pour cette faute de
couper-coller. Je corrige de ce pas.

Cordialement,

  • Xavier Leroy

@vicuna vicuna added the bug label Mar 19, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant