Visualizzazione dei risultati da 1 a 3 su 3

Discussione: C++,c]

  1. #1
    Utente di HTML.it L'avatar di fausto
    Registrato dal
    Jun 2002
    Messaggi
    294

    C++,c]

    Ciao a tutti. Sto diventando matto.

    quando linko il mio programma ottengo il seguente errore:

    g++ -o BendersGMLP benders.o main.o masterGMLP.o subProblem.o subSubProblem.o -O4 -ggdb -DIL_STD -Wall -msse2 -mfpmath=sse -UGENERA_GRAFICI -USAVECUT -UPRINT_LP -USAVEMODELS -USTAMPE -U_BASIC_BENDERS -URELAXATION -UONEMASTER -UDEBUG -UNDEBUG -I. -I/home/cplex/10.1.1/include -I/home/cplex/10.1.1/include -Iinclude -I/home/errico/TSP/concorde/libs -I/home/errico/gmlputils/include -I/home/errico/gmlplibs/include -L/home/cplex/10.1.1/x86_64-unknown-linux-gnu/lib/ -lilocplex -lcplex -L/home/cplex/10.1.1/x86_64-unknown-linux-gnu/lib/ -lconcert -lm -lpthread -L/home/errico/gmlputils/ -lGMLPutils -L/home/errico/TSP/concorde/libs -lconcorde -L/home/errico/gmlplibs -lTSP_SP

    /home/errico/gmlplibs/libTSP_SP.a(mincutConcorde.o)(.text+0x26): In function `minCutConcorde::solveMin()':
    source//mincutConcorde.C:38: undefined reference to `CCcut_mincut'
    /home/errico/gmlplibs/libTSP_SP.a(mincutConcorde.o)(.text+0x573): In function `minCutConcorde::~minCutConcorde()':
    source//mincutConcorde.C:89: undefined reference to `CCutil_freerus'
    /home/errico/gmlplibs/libTSP_SP.a(mincutConcorde.o)(.text+0x683): In function `minCutConcorde::~minCutConcorde()':
    source//mincutConcorde.C:89: undefined reference to `CCutil_freerus'
    collect2: ld returned 1 exit status

    Ora, queste funzioni sono nella libreria C chiamata libconcorde.a e sono utilizzate in una coppia di file chiamati mincutConcorde.C-.h

    ecco mincutConcorde.h

    #ifndef MINCUTCONCORDE
    #define MINCUTCONCORDE
    #include <iostream>
    #include <limits>
    #include <vector>
    //#include <cut.h>
    //#include <concorde.h>
    #include "indexes.h"
    #define CUTFILE "cut_file"
    extern "C"
    {
    #include "concorde.h"
    }
    using namespace std;

    class minCutConcorde{
    public:
    ___minCutConcorde(double * weights, int nnodes);
    ___~minCutConcorde();
    ___void solveMin();
    ___double getCutVal();
    ___int * getCut();
    ___int getCutDim();
    private:
    ........
    };

    questi due file sono anche loro compilati a parte nella libreria libTSP_SP.a

    quando vado a likare tutto, il compilatore mi da il problema di cui sopra.


    ecco infine il make (del programma che fallisce):
    -------------------------------------------------------------------------------------------------------
    PROGRAM = BendersGMLP
    all : $(PROGRAM) lib

    CPLEXDIR = /home/cplex/10.1.1
    CONCERTDIR = /home/cplex/10.1.1

    HEADERDIR = include
    SOURCEDIR = source


    CONCERTINCDIR = $(CONCERTDIR)/include
    CPLEXINCDIR = $(CPLEXDIR)/include

    CONCERTLIBDIR = $(CONCERTDIR)/$(CONFIG_GUESS)/lib/
    CPLEXLIBDIR = $(CPLEXDIR)/$(CONFIG_GUESS)/lib/

    CCLNFLAGS = -L$(CPLEXLIBDIR) -lilocplex -lcplex -L$(CONCERTLIBDIR) -lconcert \
    -lm -lpthread -L$(HOME)/gmlputils/ -lGMLPutils \
    -L$(HOME)/TSP/concorde/libs -lconcorde \
    -L$(HOME)/gmlplibs -lTSP_SP
    INCPATH = -I. -I$(CPLEXINCDIR) -I$(CONCERTINCDIR) -I$(HEADERDIR) \
    -I$(HOME)/TSP/concorde/libs \
    -I$(HOME)/gmlputils/include \
    -I$(HOME)/gmlplibs/include

    CCC = g++
    CC = gcc

    CFLAGS = -O4 -ggdb -DIL_STD -Wall -msse2 -mfpmath=sse -UGENERA_GRAFICI -USAVECUT -UPRINT_LP -USAVEMODELS \
    -USTAMPE -U_BASIC_BENDERS -URELAXATION -UONEMASTER\
    -UDEBUG -UNDEBUG

    VPATH = source
    SOURCES = $(wildcard $(SOURCEDIR)/*)
    OBJ = $(SOURCES:.C=.o)



    #per l'eseguibile
    $(PROGRAM): $(OBJ)
    ___$(CCC) -o $@ $(^F) $(CFLAGS) $(INCPATH) $(CCLNFLAGS)

    # per la libreira
    lib: $(OBJ)
    ___ar ruv lib$(PROGRAM).a *.o
    #__rm -f *.o

    %.o: %.C
    ___$(CCC) $(CFLAGS) $(INCPATH) -c $<


    NOTE:
    -- se copio il mincutConcorde.o generato durante la compilazione della libreria libTSP_SP.a nella directory dove
    compilo il programma e se nel make indico esplicitamente la dipendenza da mincutConcorde.o, il linking
    avviene in modo corretto (vuol dire almeno che le librerie che gli indico sono giuste)
    -- ho fatto un piccolo programma di prova, solo un main che chiama le funzioni incriminate quando
    la coppia mincutConcorde e' compilata nella libreria libTSP_SP.a: funziona perfettamte
    -- ho provato a compilare sia con gcc che con g++


    non so piu' cosa fare... sono disperato.

    fausto
    laptop asus L5800C
    slackware 11.0 kernel 2.6.17

  2. #2
    Utente di HTML.it L'avatar di fausto
    Registrato dal
    Jun 2002
    Messaggi
    294
    scusate! mi sono accorto di non aver inserito correttamente il subject.
    doveva essere:
    C++,C] errore linking.
    laptop asus L5800C
    slackware 11.0 kernel 2.6.17

  3. #3
    Utente di HTML.it L'avatar di fausto
    Registrato dal
    Jun 2002
    Messaggi
    294
    VVoVe: VVoVe: VVoVe:

    e' una questione di ordine dei -L!!!

    giuro, questa proprio non la sapevo. Non ho ancora capito quale delle librerie vuole
    la precedenza, ma cambiando l'ordine linka.

    :master:
    laptop asus L5800C
    slackware 11.0 kernel 2.6.17

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.