C-käännös: mitä parametreja linkkausta varten ?

Anonyymi

1. Aluksi on tehty näin (OS: Windows):

copy /b pdftopng.cc pdftoXXX.cc

2. Seuraavaksi on poistettu riippuvuudet libpng -kirjastoon (ainakin on ollut tarkoitus poistaa).

jos kääntää tyyliin gcc -c ...., niin itse käännös onnistuu ilman virheilmoituksia.

MUTTA:

Kun jättää tuon -c pois, jotta kääntäjä kääntämisen lisäksi myös linkkaisi ja tuottaisi EXE -tiedoston, niin siitä seuraa kasa virheilmoituksia.

Alla on copy-pastetus em. tavalla tuotetun pdftoXXX.cc -tiedoston sisällöstä:


ilmeisesti kääntäjälle pitäisi antaa lisäparametreja tyyliin:

gcc -Lxxxx -Lyyyy -Lzzzz

jotta kääntäjä osaisi löytää ne binäärimuotoiset kirjastot, jotka liittyvät lähdekielisessä muodossa oleviin include -lauseisiin.

Mutta (allaolevan perusteella):

MITÄ tarkalleen pitää antaa -L -option perään, jotta myös linkkaus onnistuisi ?

Tarkoituksena oli siis ottaa pohjaksi koodia, joka osaisi tuottaa PNG -tiedoston sille syötetyn PDF -tiedoston perusteella, mutta muokata output -modulia siten, että se tuottaisi BMP -tiedoston PNG -tiedoston sijasta:

(Samalla päästään eroon riippuvuuksista, joita PNG -formaatin tukeminen tarvitsisi).

Alla siis copy-paste tiedostosta pdftoXXX.cc:


// pdftoXXX.cc
// png
// Copyright 2009 Glyph & Cog, LLC
//
//========================================================================

#include "aconf.h"
#include <stdlib.h>
#include <stdio.h>
// #include <png.h>
#ifdef _WIN32
# include <io.h>
# include <fcntl.h>
#endif
#include "gmem.h"
#include "gmempp.h"
#include "parseargs.h"
#include "GString.h"
#include "gfile.h"
#include "GlobalParams.h"
#include "Object.h"
#include "PDFDoc.h"
#include "SplashBitmap.h"
#include "Splash.h"
#include "SplashOutputDev.h"
#include "config.h"

10

1453

    Vastaukset 10

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      Senkin jälkeen, kun kääntäjä on vaihdettu:

      EI: gcc

      VAAN:

      g

      niin senkin jälkeen tulee seuraavat virheilmoitukset (duplikaatit poistettu listalta listan lyhentämiseksi):

      undefined reference to `fixCommandLine(int*, char***)'
      undefined reference to `gfree(void*)'
      undefined reference to `gfree(void*)'collect2.exe: error: ld returned 1 exit statusHP@HP-PC /f/d7/ccomp/pdftools/poppler/xpdf-4.03/xpdf
      undefined reference to `globalParams'
      undefined reference to `GlobalParams::~GlobalParams()'
      undefined reference to `GlobalParams::GlobalParams(char const*)'
      undefined reference to `GlobalParams::setAntialias(char*)'
      undefined reference to `GlobalParams::setEnableFreeType(char*)'
      undefined reference to `GlobalParams::setErrQuiet(int)'
      undefined reference to `GlobalParams::setupBaseFonts(char const*)'
      undefined reference to `GlobalParams::setVectorAntialias(char*)'
      undefined reference to `gmallocn(int, int)'
      undefined reference to `GString::~GString()'
      undefined reference to `GString::format(char const*, ...)'
      undefined reference to `GString::GString(char const*)'
      undefined reference to `Object::memCheck(_iobuf*)'
      undefined reference to `openFile(char const*, char const*)'
      undefined reference to `parseArgs'
      undefined reference to `PDFDoc::~PDFDoc()'
      undefined reference to `PDFDoc::displayPage(OutputDev*, int, double, double, int, int, int, int, int(*)(void*), void*)'
      undefined reference to `PDFDoc::PDFDoc(char*, GString*, GString*, PDFCore*)'
      undefined reference to `printUsage'
      undefined reference to `SplashOutputDev::SplashOutputDev(SplashColorMode, int, int, unsigned char*, int, int)'
      undefined reference to `SplashOutputDev::startDoc(XRef*)'

    • Anonyymi

      Toimiiko Windowsissa makefile vai pitääkö tehdä projekti Visual Studiolla ja kääntää sillä? Pieni commandline softa.

      • Anonyymi

        Ei vaikuta kovin pieneltä, kun tarvitaan noin paljon kirjastoja mukaan.


    • Anonyymi

      Minulla kummallakin kääntäjällä valittaa samojen kirjastojen puuttumista:

      //#include "aconf.h"
      //#include "gmem.h"
      //#include "gmempp.h"
      //#include "parseargs.h"
      //#include "GString.h"
      //#include "gfile.h"
      //#include "GlobalParams.h"
      //#include "Object.h"
      //#include "PDFDoc.h"
      //#include "SplashBitmap.h"
      //#include "Splash.h"
      //#include "SplashOutputDev.h"
      //#include "config.h"

      gcc -Wall -c "s24.c"
      ja
      g -Wall -c "s24.cpp"

    • Anonyymi

      Liittyykö tämä jotenkin XpdfReader ohjelmaan?

    • Anonyymi

      "Kun jättää tuon -c pois, jotta kääntäjä kääntämisen lisäksi myös linkkaisi ja tuottaisi EXE -tiedoston, niin siitä seuraa kasa virheilmoituksia."

      Niitä ei tehdä samalla kertaa. Ensiksi käännetään oma lähdekoodi .o objektitiedostoksi sillä -c valitsimella.

      Sitten linkataan -o valitsimella se .exe tiedosto ja niistä -o tiedostoista ja -l valitsimella otetaan .dll kirjasto mukaan.

      Käännöstä ohjataan normaalisti esimerkiksi Makefilellä.

    • Anonyymi

      Helpompaa tehdä jollain kymmeniä tuhansia euroja maksavalla Visual Studiolla tietysti ohjelmia.

      Törmäsin mielenkiintoiseen ohjelmaan TCP/IP Viewer, näytti Visual C koodille mutta jännä ohjelma :(I

      • Anonyymi

        Ei ole. Windowsille ei vaan oikeastaan ikinä kannata kääntää C-koodia.

        Siitä tulee paljon vaikeuksia kun yleensäkin aletaan tekemään asioita tyhmästi. Helpointa olisi neuvoa jos tietäisi mitä ongelmaa ohjelman loppukäyttäjä koittaa ratkoa.


      • Anonyymi
        Anonyymi kirjoitti:

        Ei ole. Windowsille ei vaan oikeastaan ikinä kannata kääntää C-koodia.

        Siitä tulee paljon vaikeuksia kun yleensäkin aletaan tekemään asioita tyhmästi. Helpointa olisi neuvoa jos tietäisi mitä ongelmaa ohjelman loppukäyttäjä koittaa ratkoa.

        "Helpointa olisi neuvoa jos tietäisi mitä ongelmaa ohjelman loppukäyttäjä koittaa ratkoa"

        Niin: Haluaisin siis tuottaa kirjaston: libpdftobmp.dll

        jotta voin tuota DLL -muotoista pdftobmp -toiminnallisuutta käyttää omassa ohjelmassani.

        Tuon oman ohjelmani siis ei tarvitse olla C tai C -kielillä kirjoitettu, sillä kiitos Microsoftin, DLL:t ovat kieliriippumattomia, eli ovat periaatteessa käytettävissä kaikista ohjelmista, riippumatta siitä, millä kielellä ko. ohjelma on koodattu.

        Toki joissain ohjelmointikielissä voi olla rajoituksia, millaisia DLL:iä ko. kielellä tehdyistä ohjelmista voi kutsua.

        En esimerkiksi tiedä, voiko Java -ohjelmista kutsua mielivaltaista DLL:ää, vai onko JAVAn tuki DLL:ien kutsumiselle rajattu vain sellaisiin DLL:iin, jotka noudattavat JNI:ta (Java Native Interface).

        En vain ymmärrä sitä, että JOS jokin C -kielellä koodattu ohjelmapalanen, otetaan nyt esimerkiksi tuo png.h (hyvä esimerkki siksi, että nimenomaan tuota en aio lainkaan käyttää tuossa omassa DLL:ssäni, joka kyllä tehdään ottaen pohjaksi pdftopng -ohjelman lähdekoodi, mutta tuolle lähdekoodille tehdään 2 muutosta eli 1: poistetaan riippuvuus png:hen, koska ulos halutaan bmp eikä png, ja 2: muutetaan lähdekoodia siten, että syntyy DLL eikä EXE):

        Samassa yhteydessä, jossa alkuperäisessä lähdekoodissa lukee:

        #include <png.h>

        olisi asiallista, että siinä olisi kommentti:

        Linkkausvaiheessa käytä

        -LLIBPNG

        tms.

        Tuo ei sitten välttämättä ole täsmälleen oikein, vaan on vain oma oletukseni,
        eli ensimmäinen -L on kääntäjäoptio,

        ja perässä tuleva LIBPNG on kirjastotiedoston nimi, vaaditaanko tuoho tiedostopääte, vai osaako C tai C -kääntäjä itse päätellä oikean tiedostopäätteen tässä tapauksessa?

        Entä hakemistopolku, miten kertoisin kääntäjälle, missä hakemistossa tuo LIBPNG on, JOS aikoisin tuota LIBPNG -kirjastoa käyttää (mutta en siis aio, vaan tuo LIBPNG on tässä vain esimerkki).


    • Anonyymi

      Eikös tuolla -L parametrilla kerrotu, missä hakemistossa kirjastoja on? ja kirjastot annettiin sitten -l parametrilla ilman lib-osaa. math.lib siis -lmath (Linuxissa sama on libmath.so => lmath). Tämä on vain esimerkki, eikä välttämättä liity mihinkään oikeisiin käännösyksiköihin mitä tarvitaan! Käännösrimpsuun pitää laittaa mukaan kaikki objekti-tiedostot jotka olet -c parametrilla tuottanut. Lisäksi pitää olla kirjastot. Jos käytät c :aa, kannattaa katsoa 'c mangle' vielä googlella, josko jotain ratkeaisi..?

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Ampuminen kylpylässä

      Onko vornasen timbe käynyt hiukan kylpemässä vai mikä tämä ampumatapaus on kylpylässä? Tuntuu aika villi meno olevan naa
      Naantali
      86
      2006
    2. Kemijärvellä vesionnettomuus

      Pitkänsillan ja taiteilijanniemen välillä nähty henkilön painuvan veden alle. Mitä on tapahtunut? Onko vesihiisi taas as
      Kemijärvi
      39
      1293
    3. Hei, voitko kuunnella

      Voisitko auttaa minua selvittämään asioita? En halua ajaa sinua hulluuteen kanssani, en sitoa sinua, en esittää vaatimu
      Ikävä
      134
      984
    4. Joku porukka lähtenyt täältä

      Ihmeen hiljainen on palsta nyt. Yleensä tänne tulvii aloituksia yms, mutta nyt on kyllä erikoisen hiljaista.
      Ikävä
      210
      915
    5. Miten yrität

      Vielä saada kaivattusi?
      Ikävä
      78
      799
    6. 90
      784
    7. Olipa yllätys

      Kuten hyvin moni tiesi/arvasi että valetta alusta loppuun toi *olemme ystäviä* satu. Instassaan käsi kädessä kuva kertoo
      Kotimaiset julkkisjuorut
      213
      700
    8. Tuletko tänään

      Jos soitan? Niin... tuletko?🖤
      Ikävä
      68
      662
    9. Se kun olit pitkästä aikaa silmieni edessä

      Oli kyllä sykähdyttävää. Tiedätkö, mikä laittaa minut ikävöimään sinua? Kun palautan mieleeni valtavan ihanan olemuksen,
      Ikävä
      47
      662
    10. On todella ikävää

      Todella ikävää, että asiat ovat menneet tällaisiksi. Tämä ei ollut missään vaiheessa tarkoitukseni. Olen tehnyt virheit
      Ikävä
      79
      628
    11. Muutto auto hakee sut tänään!

      Tein sulle oman huoneen! mieheltä naiselle
      Ikävä
      69
      601
    12. Kiinni jäit

      Ei olisi uskonut sinusta
      Ikävä
      35
      591
    13. 37
      541
    14. Ottanet yhteyttä

      Facebookissa,jos on jotain asiaa.Miehelle! T.M-nainen.
      Ikävä
      55
      517
    15. Oletteko koskaan torjuneet kaivattuanne?

      Minä olen, kun en silloin tajunnut vielä ihastuneeni. Yritin paikata tapahtunutta, mutta ei onnistunut enää.
      Ikävä
      25
      467
    16. Kai sä mies ymmärrät..

      ..ettet jättänyt vaihtoahtoa. Tottakai toivon vielä, että pystyisit toimimaan niin että asiat korjaantuisivat. Vahvast
      Ikävä
      28
      452
    17. Hämmentävä hetki: TTK:sta pudonnut Johanna Puhakka lataa pettyneenä: "Sitä ei voi kieltää"

      Johanna Puhakka ja Jurijs Jurza Trosenko tippuivat Tanssii Tähtien Kanssa -kisasta. Suositussa viihdeohjelmassa nähtiin
      Tanssii tähtien kanssa
      13
      449
    18. Nyt ei enää ole

      Mitään mikä pitäisi mut hiljaa, kaikesta. Tämä on muutamalle henkilölle täällä.
      Ikävä
      35
      444
    19. En tiedä mitä sanoa

      Siksi en vastannut😔
      Ikävä
      33
      433
    20. Jos kaivattusi olisi

      Vieressäsi niin mitä tekisit?
      Ikävä
      40
      427
    Aihe