Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Error while linking


Sujet :

Free Pascal

  1. #1
    Membre régulier
    Error while linking
    Bonjour à tous,

    J'ai un gros problème avec FPC. Lorsque je veux compiler un programme avec FPC sous Windows XP ça marche sans problème. Mais lorsque je veux faire du cross-compiling de Windows à Linux ou même lorsque je le compile directement sous Ubuntu (toujours avec FPC bien sûr) il me retourne toujours la même erreur en fin de programme : Error while linking !!!

    Alors là je n'ai vraiment aucune idée d'où ça peut venir. Et ça m'embête énormément surtout que je suis sencé faire tourner mon programme sous Linux, et que si j'utilise gpc (installé au pool de la fac) il ne veut pas non plus compiler mon fichier (mais bon lui il me retourne plein plein d'erreurs donc j'ai laissé tomber).

    Si quelqu'un avait une vague idée de ce "Error while linking" et comment le résoudre ça m'aiderait beaucoup !
    Pour info je n'utilise que "crt" dans mon programme... (si ça peut aider à répondre à d'éventuelles questions).

    Merci d'avance !

  2. #2
    Membre régulier
    Bon je copie ici le message de la console, peut-être que ça vous parlera plus qu'à moi

    Free Pascal Compiler version 2.0.4 [2006/08/20] for i386
    Copyright (c) 1993-2006 by Florian Klaempfl
    Target OS: Linux for i386
    Compiling /home/marco/sudoku.pas
    Linking /home/marco/sudoku
    /usr/bin/ld: link.res: pas de fichier tel: Aucun fichier ou répertoire de ce type
    sudoku.pas(565,1) Error: Error while linking
    Error: /opt/fpc/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)

  3. #3
    Membre confirmé
    Re:
    aparement l'editeur de lien de freepascal rencontre des problémes lors de l'edition des liens
    je te conseil de voir sur le forum Linux c mon avis en tous cas
    cordialement @+
    et vint le 20siècle et l'homme se mit à réflechir comme la machine auteur: diden138
    Langage: Pascal,OCaml,Delphi,c/c++.
    Langages web:Xhtml,Css,Php/Mysql,Javascript,Actionscript 2.0
    Plate forme:Windows XP Pro SP2./Red Hat 9.0/SUSE 10.2
    Config :Intel P4 3.2GHZ,2MO cach,512 RAM.
    Outils:Tp7,objective caml,Delphi 6 perso, C++builder 6,Visual C++ Express edition sous win,code-block sous linux(Ubuntu) .

  4. #4
    Responsable Pascal, Lazarus et Assembleur

    Bonjour !
    Citation Envoyé par l'éditeur de liens
    pas de fichier tel: Aucun fichier ou répertoire de ce type
    Il cherche un fichier ou dossier nommé tel. Pas la moindre idée de quoi il peut s'agir...
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]

  5. #5
    Membre habitué
    [FreePascal][Cross-Compile]
    Bonjour à tous,

    Cette discussion reprend exactement ce que je cherche à faire :
    - Compiler de Win32 vers Linux au moyen de FreePascal (puis Lazarus)

    Aprés installation comme sur des roulettes de FreePascal puis Lazarus je teste un "hello world" sur lazarus, et j'obtiens "Can't Find System Unit". Google me renvoie sur une précédente discussion de Zafo pour extraire i386-Linux et l'ajouter à côté de son copain i386-Win32. (http://www.developpez.net/forums/sho...d.php?t=286500)

    Comme Zafo, l'installation me permet de passer à l'étape suivante (plus d'erreur can't find system...

    Je décide de tester plus basiquement FreePascal dans un premier temps avec un projet livré en standard dans le répertoire de démo/txt de fpc :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    {
    program hello;
     
      begin
         writeln('Hello world');
      end.


    Mais j'obtiens : Error While Linking.
    Quelqu'un a t il déjà vu cette erreur sur freepascal ???

    a++

  6. #6
    Membre régulier
    Oui moi xD
    Et je n'ai toujours pas trouvé de solution à ce problème... (malheureusement).

    Un admin m'avait bien suggéré de le passer dans le forum Linux, mais bon, comme c'est le même problème de Windows en cross-compiling ou directement sous Linux... je risquais juste de me faire jeter dehors ^^

  7. #7
    Membre éclairé
    Vous êtes tous deux confrontés à un problème d'installation sous linux non réussie...
    Sous linux, freepascal doit s'installer avec des droits d'administrateur, et il convient d'installer tous les packages demandés pour satisfaire les dépendances...
    Il y en a une quinzaine pour une mandriva, difficiles à trouver car non fournis sur les dvd, meme sur les versions commerciales les plus complètes...
    Suse en demande une petite dizaine, pareil pour ubuntu et kubuntu...
    Je n'ai pas eu l'occasion d'installer Lazarus et freepascal ailleurs.

    A la fin de l'installation (en mode console) depuis les sources officielles chargées depuis le site officiel, vous lirez un message qui vous indique ce qui reste à faire pour ajouter des chemins aux paths en cours...

    Bref, vous ne pouvez décemment pas envisager de programmer sur un os que vous ne connaissez pas suffisemment pour installer un programme. Je ne saurai que vous conseiller de tenter une installation classique à partir des sources, et de poser vos questions au fure et à mesure sur le forum linux...

    Ce n'est pas du tout aussi simple à installer que sous windows et vous aurez à mettre les mains dans le cambouis pour réussir.

    Mais le net fourmille de conseils pour les installations sur telle ou telle distribution de Linux, documentez-vous...

    Ma dernière installation remonte à quelques mois, c'était sur une kubuntu, ça ma pris un peu plus de deux heures, tout compris lecture de documentations sur le sujet et recherches et installation des paquets supplémentaires indispensables...

    Pour le cross compiling, je n'ai jamais essayé et pas vraiment envie de perdre du temps avec celà... Vu que je teste immédiatement un programme après sa compilation, je ne vois pas l'utilité de compiler un programme que je ne peux tester immédiatement...

    Quand à ceux qui coient qu'ils vont faire un programme un peu sérieux avec un code source exactement identique pour linux et windows ce sont de doux réveurs...


    Il y a toujours des surprises et des différences de comportement d'un os à l'autre... meme si les grandes lignes d'un programme restent les mêmes, on est toujours obligé de tenir compte de l'os cible et de l'y tester...

    Bonne programmation

    Clandestino

  8. #8
    Membre régulier
    J'avais pourtant installé FreePascal sur Ubuntu d'après un tuto sur le net... Si l'installation était foireuse, pourquoi alors aurions-nous le même problème sous Windows ? Tu argumentes certes, mais tu ne donnes ni de réponse à cette dernière question ni à pourquoi la même erreur sur les deux OS ?

    Pour ce qui est du code Linux/Windows je suis au courant, et pour tout le reste aussi.

    Enfin merci quand même pour ta réponse, même si cela ne nous avance pas énormément

  9. #9
    Membre habitué
    [FreePascal][Error while linking]
    Bonsoir,

    Merci pour vos réponses
    Personnellement je pense que la cross compilation est une super idée et qu'une fois l'installation correctement mise en place on obtient une excellente portabilité...
    J'ai trouvé une proposition d'installation via cygwin mais je ne sais pas ce qu'elle peut valoir :
    http://lists.freepascal.org/lists/fp...ry/007905.html
    et aussi (avec des utilitaires)
    http://z505.com/cgi-bin/qkcont/qkcon...Elf-on-Windows

    a++

  10. #10
    Membre éclairé
    Citation Envoyé par zafo
    J'avais pourtant installé FreePascal sur Ubuntu d'après un tuto sur le net... Si l'installation était foireuse, pourquoi alors aurions-nous le même problème sous Windows ?
    l'erreur signifie simplement que le linker ne trouve pas une librairie...

    Tu ne nous fournis pas le message complet de l'erreur et donc pas le nom de la librairie en cause...

    Tu ne nous recopie pas ta ligne de commande, et nous ne voyons donc pas quels arguments tu as passé à ton compilateur...

    Ton code source n'est pas compilable tel que tu nous le présente puisque il comprend un
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    {
    jamais fermé....


    Revenons à ton message d'erreur :
    celà peut venir sous linux:
    D'une installation non complète, ou ratée de fpc...
    D'une librairie non installée ... forcément le linker ne la trouve pas
    D'un chemin de dossier non conforme (chemin trop long ou avec des espaces)pour le fichier à compiler ou pour le dossier d'installation de freepascal...
    d'une librairie correctement installée mais dont le path n'est pas dans les paths de recherches spécifiés au programme dans ses fichiers de configuration.
    D'une librairie dont tu n'as pas donné le path en argument au compilateur dans ta ligne de commande...

    etc....

    Sous windows il faut ajouter comme problème
    le nom des librairies non résolues, car linux possède des liens avec différents noms vers une meme librairie (libmachin.so, libmachin.so2, libmachin1.2.so etc... pointent vers un seul fichier) permettant de resoudre les dependances avec une seule librairie...


    Mais le bug le plus fréquent reste l'utilisation de chemins longs et non conformes... (le dossier mes documents par exemple :p )

    Bonne programmation...

  11. #11
    Expert confirmé
    Citation Envoyé par Clandestino
    Bref, vous ne pouvez décemment pas envisager de programmer sur un os que vous ne connaissez pas suffisemment pour installer un programme.
    Euh... parfois on n'a tout simplement pas le choix quand même. Et je ne crois pas qu'il soit réellement nécessaire de bien connaître un OS quand on veut programmer dessus (après tout dépend de ce qu'on veut faire). De plus que, comme tu le dis toi-même :
    Citation Envoyé par Clandestino
    Ma dernière installation remonte à quelques mois, c'était sur une kubuntu, ça ma pris un peu plus de deux heures, tout compris lecture de documentations sur le sujet et recherches et installation des paquets supplémentaires indispensables...
    Installer un logiciel sous linux peut-être vraiment galère, et pourtant Ubuntu est l'une des distributions les plus simples à utiliser, et elle est parmis les plus (et les mieux) documentées.
    Donc je ne crois pas qu'on puisse vraiment blâmer quelqu'un qui n'a pas réussi à installer un logiciel sous Linux, surtout si ce logiciel fait dépend de librairies rares...

  12. #12
    Membre régulier
    Citation Envoyé par Clandestino
    Tu ne nous fournis pas le message complet de l'erreur et donc pas le nom de la librairie en cause...
    Relis les messages précédents, tout y est.

    Citation Envoyé par Clandestino
    Tu ne nous recopie pas ta ligne de commande, et nous ne voyons donc pas quels arguments tu as passé à ton compilateur...

    Si j'en avais passé je l'aurais précisé,... aucun en l'occurence.

    Citation Envoyé par Clandestino
    Ton code source n'est pas compilable tel que tu nous le présente puisque il comprend un { jamais fermé....
    C'est pas moi, puis je suis sûr que Archibald29 sait ce qu'il fait et que ce n'est dû qu'à une erreur de copié/collé. De plus le compilateur l'aurait signalé avant le "Error while linking" (ça je le sais ^^).

    Citation Envoyé par Clandestino
    Revenons à ton message d'erreur :
    celà peut venir sous linux:
    D'une installation non complète, ou ratée de fpc...
    Je ne pense pas, je sais quand même remarquer une installation foireuse ou non. Qui plus est ça ne tient de toute façon pas la route puisque sous Windows c'est bien installé.

    Citation Envoyé par Clandestino
    D'une librairie non installée ... forcément le linker ne la trouve pas
    Pareil, relis le début du message,...

    Citation Envoyé par Clandestino
    D'un chemin de dossier non conforme (chemin trop long ou avec des espaces)pour le fichier à compiler ou pour le dossier d'installation de freepascal...
    Négatif, ce n'est pas le cas.

    Pour le reste,... only crt, comme librairie standard on fait pas mieux si ? Donc on ne peut même pas dire que je vais chercher une bibliothèqe non portable ou que personne n'utilise...
    Ceci dit le parallélisme de l'erreur Windows/Linux me fait dire que c'est bien à ce niveau-là qu'il y a un problème et non au niveau du fpc lui-même (ce dernier fonctionne).

  13. #13
    Membre habitué
    [FreePascal][Cross-Compilation]
    bonjour à tous,

    Habitué à raisonner en termes de solutions plus que de problèmes, je suis sûr et certain que la solution de la cross compilation Win32 > Linux est à la portée de nos (petits) doigts (et cerveaux).
    Ceci dit je dis à Zafo d'avoir pris ma défense ; il y avait bien en effet une parenthése fermée et ceci expliquait bien la possibilité d'atteindre le stade du linkage.
    Je continue de me creuser la tête sur le sujet qui doit concerner (potentiellement) beaucoup de monde : passer d'une plate forme propriétaire à une plate forme libre c'est quand même extrêmement attractif ???

    a++

  14. #14
    Membre éclairé
    je viens de tenter l'expérience et j'ai trouvé un package tout prêt qui a fonctionné du premier coup pour le crosscompiling win32 >> linux...

    Ce package utilise la version 1.0.10 de fpc...

    Je vous donne la démarche que je viens de suivre:
    1) télécharger le package : http://www.optimasc.com/support/fpc/...-linux-x86.zip
    2) dézipper dans un repertoire neuf avec un nom court (j'ai choisi g:\ppx)
    3) dézipper les 5 zips sur place
    4) ecrire un bout de code contenant l'unit crt
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    program test;
    uses crt;
    begin
    writeln ('hello world');
    end.

    et l'enregistrer dans un repertoire au chemin court. J'ai choisi G:\ppx\test\test.pas
    5) lancer une console de lignes de commandes et se placer dans le repertoire contenant fpc.exe.
    Pour moi ce fut
    G:\ppx\cross\i386-linux\bin>
    6) lancer la compilation
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    G:\ppx\cross\i386-linux\bin>fpc g:\ppx\test\test.pas -Xs -vi
    Free Pascal Compiler version 1.0.10a [2004/04/26] for i386
    Copyright (c) 1993-2003 by Florian Klaempfl
    Target OS: Linux for i386
    Compiling g:\ppx\test\test.pas
    Assembling test
    Linking g:\ppx\test\test
    5 Lines compiled, 0.0 sec
     
    G:\ppx\cross\i386-linux\bin>

    7) Essayer son binaire sous linux
    Chez moi il fonctionne

    ...

    En espérant vous avoir aidé...

    Clandestino

  15. #15
    Membre éclairé
    Si l'aventure vous tente de reproduire ce pack pour la version 2.0.4, voici la démarche à suivre :

    A cross compiler works on a specific operating system (the host) and
    compiles/links code for another processor/operating system (the target)

    I think one needs the following things to build a free pascal
    cross-compiler:

    1. A cross compiler which can be executed/run on the host computer and
    compiles to the target computer. (as.exe will be the cross compiler )

    2. A cross linker which can be executed/run on the host computer and links
    to the target computer.
    ( ls.exe will be the cross linker )

    3. Free Pascal Compiled Units for the target computer.
    ( c:/pp/units/linux )

    ( I don't know how to compile these units for the target computer, I
    downloaded them from somebody else )

    Here are some steps/tips to help you

    I build a free pascal cross compiler once.

    It compiles from win32 to linux.

    Here some tips:

    1. Install Free Pascal ( Binary )

    2. Install CygWin ( Binary ) Download all developer things.

    3. Install BinUtils-2.14 (or maybe another version) ( Source )

    4. Find somebody with compiled free pascal linux units. Place them in
    c:/pp/units/linux

    5. Go in CygWin

    6. Type: which make

    7. Check if it's cygwin's make. If it's the wrong version than alter
    cygwin.bat and change the path so that only windows folders and this path is
    in it: c:\cygwin\bin

    8. Go to the binutils folder

    To list folders and files type: ls

    To go to root type: cd c:/

    To go to binutils type: cd /binutils-2.14

    Make a new build folder by typing: mkdir build

    Type: cd build

    Type: ../configure --target=i686-linux

    This means it executes the program in the parent folder and places the
    output in the current folder which should be c:/binutils-2.14/build

    This configure program will make a new make file so that the binutils can be
    compiled for linux

    BinUtils contains a as.exe ( cross assembler ) and a ld.exe ( cross
    linker ) you need these two for the cross compiler.

    9. Disable firewalls and virus scanners, plug the network cables.

    10. Type: make

    It will take very long to make the new as-new.exe and ld-new.exe

    11. After it's done you have two new files:

    as-new.exe is located in build\as\

    ld-new.exe is located in build\ld\

    12.

    Execute as-new.exe with the parameter -v

    This parameter will show you if the target is indeed linux.

    If you get errors will doing this you are using the wrong cygwin1.dll. There
    could be multiple copies of
    cygwin1.dll on your system.

    The solution is to copy the cygwin1.dll file from c:\cygwin\bin to the
    as-new folder.

    13. Copy as-new.exe to c:\pp\bin\linux and rename it to as.exe
    14. Copy ld-new.exe to c:\pp\bin\linux and rename it to ld.exe

    15. Change the windows path variable so that c:\cygwin\bin is removed from
    it.

    If you don't do this then free pascal cross compiler might use the wrong
    as.exe and ld.exe.

    16. Make a simply hello world example and compile it like this:

    fpc -TLINUX hello.pas

    The result will be a linux executable without an extension.

    Go to linux and type:

    ./hello

    To run it.

    If you uploaded it to a linux machine via ftp or something and you are using
    ssh/putty whatever you might first need to give it execute permissions etc.


  16. #16
    Membre régulier
    Je vais d'abord essayer avec la dernière version et puis si ça ne va toujours pas je referai ta première démarche.

    Merci pour la réponse

  17. #17
    Membre habitué
    Super !!!
    Bonsoir,

    La version 1.0 fonctionne bien pour moi. J'ai pu compiler un CGI basic (hello world) et l'éxécuter chez mon hébergeur. clandestino.

    J'ai passé une bonne partie de l'apm sur la version 2 en suivant les conseils que tu as donné à 22h00, (j'avais trouvé le lien moi aussi), et donc installé cygwin, généré les as.exe, ld.exe mais je ne suis pas parvenu à des résultats systématiquement reproductibles lors des compilations.

    > pour réussir la compil j'avais indiqué dans les options linkeur :
    >> Call linker After
    >> Only link to Static

    et chargé les units d'aprés le lien :
    http://z505.com/cgi-bin/qkcont/qkcon...Elf-on-Windows

    Peut être faut il faire 2 installations de free pascal distinctes pour un résultat systématique stable ??? La question sera alors l'interfaçage avec Lazarus...

    En tout cas on progresse !!!

  18. #18
    Membre régulier
    Bon ben sinon c'est fait. J'ai essayé avec ta première méthode et tout a marché nickel !

    Un grand merci en tout cas

  19. #19
    Membre régulier
    ERROR WHILE LINKING [RÉSOLU]
    Tout simplement en renommant tous les chemins qui contenaient un espace par un underscore !

    NB: Je ne mets jamais d'espace dans les noms de fichiers, donc je ne sais pas si cela est aussi un problème. À creuser si votre problème persiste.