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"
C-käännös: mitä parametreja linkkausta varten ?
10
1441
Vastaukset
- 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
Joensuun kaupunki levittelee tonttitietoja Keskisuomalaiselle
Sähköposteja ja tonttitietoja levitellään mm. Pasi Koivumaalle172404Oletko nainen alkanut kammoamaan minua
Sinua ei näy eikä kuulu, ja ilmeisesti kiertelet tilanteita. Oletko huomannut, että olet vieläkin ajatuksissani luvattom671579Saako 60 v vielä töitä? Arto Nyberg puhuu suoraan elämästä ilman töitä
Arto Nyberg täyttää tänään 60 v. Onnea! Nyberg totuttiin näkemään suoran haastatteluohjelman kapteenina vuodesta toise1081509Tiesitkö tätä ex-miehistä? Noriko Salo jysäytti yllätyspaljastuksen
Noriko Salo ja ex-F1 kuski Mika Salo olivat naimisissa v. 1999-2022. Kirsi Salon ex-mies puolestaan on muusikko Sammy A61452Toivoisitko Rakas vielä?
Haluaisitko vielä? Uskoisin osaavani näyttää sinulle, kuinka ainutlaatuinen nainen olet.681315Kuka? Riehui valtuuston kokouksessa tänään ?
Onko puolangan puolesta porukkaa. Vaikuttaa siltä. Sairasta.421284Huh, huh! Sofia Belorf ei ole itse pessyt hiuksiaan kolmeen vuoteen
Sofia Belorf elää ökyelämää Dubaissa. Sofian arjessa kulta, raha ja luksus ovat vahvasti läsnä. Luksuselämään tottuneell801271Keskustelua kasteesta
You tubessa kaksi pappia keskustelivat kasteesta ja kritisoivat raamatullista uskovien kastetta. Toinen heistä yritti4001194Ihan pieni näkeminen vaan
👋 ja minä olisin valmis jo vaikka mihin sun kanssa. Nämä on näitä.. 🤫🫣😘💥311087En haluaisi kaiken kuihtuvan pois
ilman, että olemme voineet jutella rauhassa kasvotusten... Mutta mistä ihmeestä löydän sinut?521066