<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[undefined reference]]></title><description><![CDATA[<p>Ich habe mich mit extra für dieses kleine Projekt c++ beschäftigt, weiß jetzt was eine Klasse ist,<br />
wie man mittels Konsole unter linux kompiliert und linkt und kenne rudimentäre Funktionen von und g++/gcc. Aber ich kriege es nicht zum laufen.</p>
<p>ich würde mich freuen wenn jemand von euch einen Tip hat wie man weiter vorgehen kann:</p>
<p>Problem:<br />
Es liegt ein Package vor da ist unter anderem ein Hauptprogramm für bestimmte Optimierungsaufgaben dabei. Unter Dos mit Mingw lief das schon mal.</p>
<p>Es existiert Quellcode der eigentlich fehlerfrei unter linux zu kompilieren und linken sein sollte.<br />
Allein aus den Quellcodes Objektcode zu kompilieren empfand ich Einsteiger als nicht ganz trivial.<br />
Es mussten einige Änderungen vorgenommen werden: (hab ellenlang im Netz nach lösungen gesucht..)<br />
ersetzen von khbit(), ersetzen von conio.h. durch ncurses.h usw..</p>
<p>ich wollte folgendes linken:</p>
<pre><code>g++ traps.o trapslib.o trapsrep.o trapsind.o trapsmod.o jklib2.a nrc206.a

da meckert g++: 
traps.o: In function `SpecGenEvolve(_IO_FILE*, PORTFOLIO&amp;)':
traps.c:(.text+0x1f0): undefined reference to `GENOPT::GENOPT()'
traps.c:(.text+0x203): undefined reference to `GENOPT::~GENOPT()'
traps.c:(.text+0x2ab): undefined reference to `GENOPT::setup(long, long)'
traps.c:(.text+0x2ba): undefined reference to `GENOPT::randomize(long)'
usw...
</code></pre>
<p>Auszug traps.c</p>
<pre><code>#include &quot;../gopt103/genopt1.hpp&quot;       // genetic optimizer header file

...

void SpecGenEvolve (FILE *fil, PORTFOLIO &amp;pf) {

    // Performs portfolio-wide genetic optimization for evolving
    // rules as done in S&amp;C article by authors.
    // fil     - non-standard output file for optimization data
    // pf      - portfolio structure

    static float bprm[MAXPRM], *pfit;
    int gen, i, isdup, k, line;
    static GENOPT go;
    #define MINFIT (-999999.0)

    // set up genetic optimizer specific to problem to be solved
    fprintf(stdout,&quot;Initializing genetic optimizer...\n&quot;);
    fflush(stdout);
    k = 12;             // parameter count for evolution
    go.setup(k, 15*k);  // set population 10 times parameter count
    go.randomize(1234);
    go.mutation und soweiter

...
</code></pre>
<p>die genopt1.hpp</p>
<pre><code>// GENOPT1.HPP - Genetic optimizer component header file
...
// May be used with 32-bit and 16-bit ANSI C++ compilers.

#define GONORMAL	1
#define GODIFFERENTIAL	2
#define GOMINFIT 	(-1.0E32)

class GENOPT {
private:
    long    np;         // population size
    long    nv;         // vector size
    long    ng;         // generation count
    float   **v;        // population member vectors
    float   *f;         // population member fitnesses
    float   *vc;        // child vector
    float   cmf;        // child fitness
    float   crnt;       // current fitness
    float   *ub;        // upper scaling bounds
    float   *lb;        // lower scaling bounds
    float   bmf;        // best member fitness
    float   amf;        // average member fitness
    float   mr;         // mutation rate
    float   *mc;        // mutation creep
    float   cr;         // crossover rate
    long    chnk;       // chunk size for crossovers
    long    alg;	// evolutionary algorithm selector
    float   devf;	// differential evolution factor
    long    urs;        // rng internal
    long    rngiseed2;	// rng internal
    long    rngiy;	// rng internal
    long    rngiv[32];	// rng internal
private:
    float rng(long &amp;iseed);
    void randinit(long seed);
    float randflt(void);
    long randint(long n);
public:
    GENOPT(void);
    ~GENOPT(void);
    long setup(long nvec, long npop);
    void clear(void);
    void scale(long k, float vmin, float vmax);
    void mutation(float mut) { mr=mut; };
    void creep(long k, float mutc) { mc[k]=mutc; };
    void crossover(float cross) { cr=cross; };
    void chunk(long k) { chnk=k; };
    void algorithm(long m) { alg=m; };
    void differential(float fac) { devf=fac; };
    void randomize(long seed);
    void receive_vector(float *vec);
    void send_fitness(float fit);
    float scale_ub(long k) { return ub[k]; };
    float scale_lb(long k) { return lb[k]; };
    float mutation(void) { return mr; };
    float creep(long k) { return mc[k]; };
    float crossover(void) { return cr; };
    long chunk(void) { return chnk; };
    long algorithm(void) { return alg; };
    float differential(void) { return devf; };
    float memberfitness(long k) { return f[k]; }
    float membervecelt(long k, long i);
    void mostfitvector(float *vec);
    float bestfitness(void) { return bmf; };
    float averagefitness(void) { return amf; };
    float currentfitness(void) { return crnt; };
    long generations(void) { return ng; };
    long population(void) { return np; };
    long vectorsize(void) { return nv; };
};

#endif /* QQ
</code></pre>
<p>DANKE im Voraus<br />
S</p>
<p>PS OS ist ein 64bit Debian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269925/undefined-reference</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 18:56:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269925.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Jul 2010 21:26:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to undefined reference on Sat, 03 Jul 2010 21:26:11 GMT]]></title><description><![CDATA[<p>Ich habe mich mit extra für dieses kleine Projekt c++ beschäftigt, weiß jetzt was eine Klasse ist,<br />
wie man mittels Konsole unter linux kompiliert und linkt und kenne rudimentäre Funktionen von und g++/gcc. Aber ich kriege es nicht zum laufen.</p>
<p>ich würde mich freuen wenn jemand von euch einen Tip hat wie man weiter vorgehen kann:</p>
<p>Problem:<br />
Es liegt ein Package vor da ist unter anderem ein Hauptprogramm für bestimmte Optimierungsaufgaben dabei. Unter Dos mit Mingw lief das schon mal.</p>
<p>Es existiert Quellcode der eigentlich fehlerfrei unter linux zu kompilieren und linken sein sollte.<br />
Allein aus den Quellcodes Objektcode zu kompilieren empfand ich Einsteiger als nicht ganz trivial.<br />
Es mussten einige Änderungen vorgenommen werden: (hab ellenlang im Netz nach lösungen gesucht..)<br />
ersetzen von khbit(), ersetzen von conio.h. durch ncurses.h usw..</p>
<p>ich wollte folgendes linken:</p>
<pre><code>g++ traps.o trapslib.o trapsrep.o trapsind.o trapsmod.o jklib2.a nrc206.a

da meckert g++: 
traps.o: In function `SpecGenEvolve(_IO_FILE*, PORTFOLIO&amp;)':
traps.c:(.text+0x1f0): undefined reference to `GENOPT::GENOPT()'
traps.c:(.text+0x203): undefined reference to `GENOPT::~GENOPT()'
traps.c:(.text+0x2ab): undefined reference to `GENOPT::setup(long, long)'
traps.c:(.text+0x2ba): undefined reference to `GENOPT::randomize(long)'
usw...
</code></pre>
<p>Auszug traps.c</p>
<pre><code>#include &quot;../gopt103/genopt1.hpp&quot;       // genetic optimizer header file

...

void SpecGenEvolve (FILE *fil, PORTFOLIO &amp;pf) {

    // Performs portfolio-wide genetic optimization for evolving
    // rules as done in S&amp;C article by authors.
    // fil     - non-standard output file for optimization data
    // pf      - portfolio structure

    static float bprm[MAXPRM], *pfit;
    int gen, i, isdup, k, line;
    static GENOPT go;
    #define MINFIT (-999999.0)

    // set up genetic optimizer specific to problem to be solved
    fprintf(stdout,&quot;Initializing genetic optimizer...\n&quot;);
    fflush(stdout);
    k = 12;             // parameter count for evolution
    go.setup(k, 15*k);  // set population 10 times parameter count
    go.randomize(1234);
    go.mutation und soweiter

...
</code></pre>
<p>die genopt1.hpp</p>
<pre><code>// GENOPT1.HPP - Genetic optimizer component header file
...
// May be used with 32-bit and 16-bit ANSI C++ compilers.

#define GONORMAL	1
#define GODIFFERENTIAL	2
#define GOMINFIT 	(-1.0E32)

class GENOPT {
private:
    long    np;         // population size
    long    nv;         // vector size
    long    ng;         // generation count
    float   **v;        // population member vectors
    float   *f;         // population member fitnesses
    float   *vc;        // child vector
    float   cmf;        // child fitness
    float   crnt;       // current fitness
    float   *ub;        // upper scaling bounds
    float   *lb;        // lower scaling bounds
    float   bmf;        // best member fitness
    float   amf;        // average member fitness
    float   mr;         // mutation rate
    float   *mc;        // mutation creep
    float   cr;         // crossover rate
    long    chnk;       // chunk size for crossovers
    long    alg;	// evolutionary algorithm selector
    float   devf;	// differential evolution factor
    long    urs;        // rng internal
    long    rngiseed2;	// rng internal
    long    rngiy;	// rng internal
    long    rngiv[32];	// rng internal
private:
    float rng(long &amp;iseed);
    void randinit(long seed);
    float randflt(void);
    long randint(long n);
public:
    GENOPT(void);
    ~GENOPT(void);
    long setup(long nvec, long npop);
    void clear(void);
    void scale(long k, float vmin, float vmax);
    void mutation(float mut) { mr=mut; };
    void creep(long k, float mutc) { mc[k]=mutc; };
    void crossover(float cross) { cr=cross; };
    void chunk(long k) { chnk=k; };
    void algorithm(long m) { alg=m; };
    void differential(float fac) { devf=fac; };
    void randomize(long seed);
    void receive_vector(float *vec);
    void send_fitness(float fit);
    float scale_ub(long k) { return ub[k]; };
    float scale_lb(long k) { return lb[k]; };
    float mutation(void) { return mr; };
    float creep(long k) { return mc[k]; };
    float crossover(void) { return cr; };
    long chunk(void) { return chnk; };
    long algorithm(void) { return alg; };
    float differential(void) { return devf; };
    float memberfitness(long k) { return f[k]; }
    float membervecelt(long k, long i);
    void mostfitvector(float *vec);
    float bestfitness(void) { return bmf; };
    float averagefitness(void) { return amf; };
    float currentfitness(void) { return crnt; };
    long generations(void) { return ng; };
    long population(void) { return np; };
    long vectorsize(void) { return nv; };
};

#endif /* QQ
</code></pre>
<p>DANKE im Voraus<br />
S</p>
<p>PS OS ist ein 64bit Debian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920959</guid><dc:creator><![CDATA[Spacepilot]]></dc:creator><pubDate>Sat, 03 Jul 2010 21:26:11 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference on Sat, 03 Jul 2010 21:59:25 GMT]]></title><description><![CDATA[<p>Jesus, was für ein elender Haufen mieser Dreckscode!</p>
<p>Zunächst mal ist .c die falsche Endung für C++-Code.<br />
Die Fehlermeldungen kommen vom Linker, der die Definitionen der Memberfunktionen nicht finden kann. Die beiden Sourcefiles die du da gezeigt hast, haben auch rein gar nichts miteinander zu tun.</p>
<p>Gibst du dem Compiler auch irgendwo ein C++-File zum kompilieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920971</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Sat, 03 Jul 2010 21:59:25 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference on Sat, 03 Jul 2010 22:03:29 GMT]]></title><description><![CDATA[<p>Da fehlt noch (mindestens) eine Bibliothek. Steht in der Doku nicht, welche Bibliotheken benötigt werden?</p>
<p>Nach dem Kommentar<br />
// May be used with 32-bit and 16-bit ANSI C++ compilers.<br />
müsstest du eine 32-Bit Version bauen.</p>
<p>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920973</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 03 Jul 2010 22:03:29 GMT</pubDate></item><item><title><![CDATA[Reply to undefined reference on Mon, 05 Jul 2010 20:14:45 GMT]]></title><description><![CDATA[<p>Danke erstmal für die Hinweise - sind schon mal sehr hilfreich.</p>
<p>Eigentlich sollte es doch keine Rolle spielen ob man</p>
<p>lib1.a lib2.a lib3.a ...</p>
<p>oder</p>
<p>lib_die_alle_libs_in_einer_enthält.a</p>
<p>einbindet?</p>
<p>In der Doku (im Verzeichnis für DOS) steht</p>
<p>das jedes Unterverzeichnis von /SCICON eine Bibliothek enthält. (liegen prebuild vor).<br />
Nun steht da das im Unterverzeichnis /TRAPS (wo sich auch der Code für das Hauptprogramm befindet eine merged.lib liegen soll, die den Code aus allen anderen Bibliotheken enthält. Diese ist bei dem Verzeichnis für DOS vorhanden - aber beim dem für Linux nicht.<br />
Nun dachte ich es sollte keinen Unteschied machen ob man die libs einzeln dazu linkt oder als merged.a, oder??</p>
<p>Ich bin ein bisschen verwundert weil in der Doku steht:</p>
<p>This version of the software compiles without errors using the<br />
GNU C++ compiler that is popular with Linux / Unix users.<br />
The GNU compiler suite is also available for Windows as part<br />
of MinGW and MSYS.</p>
<p>Und ich meine das unter MinGW relativ einfach ist das Programm zu erstellen. Hatte ich vor ca einem Jahr ausprobiert..<br />
(mit den vorhandenen makefiles etc)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921909</guid><dc:creator><![CDATA[Spacepilot]]></dc:creator><pubDate>Mon, 05 Jul 2010 20:14:45 GMT</pubDate></item></channel></rss>