Was will mir der Compiler damit sagen?



  • Ich versuche gerade ein Programm mit Matlab Interface zu kompilieren. Ich habe das Makefile so angepasst wie es in der Readme.txt vorgeschlagen wurde. Folgende Daten zu meinem System:

    Mac OS X Snow Leopard

    gfortran Version:
    gfortran --version
    GNU Fortran (GCC) 4.5.0 20090604 (experimental)

    gcc Version:
    gcc --version
    i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)

    Wenn ich das Programm mit make kompilieren möchte erhalte ich folgenden Fehler:

    make
    gfortran -O3 -x f77-cpp-input -fPIC -fno-common -o solver.o -c solver.f
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o matlabexception.o -c matlabexception.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o matlabscalar.o -c matlabscalar.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o matlabstring.o -c matlabstring.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o matlabmatrix.o -c matlabmatrix.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o arrayofmatrices.o -c arrayofmatrices.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o program.o -c program.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o matlabprogram.o -c matlabprogram.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o lbfgsb.o -c lbfgsb.cpp
    /Applications/MATLAB_R2009b.app/bin/mex -cxx CXX=g++ CC=g++ FC= LD=g++ -lm \
    -O -output lbfgsb.mexmaci64 solver.o matlabexception.o matlabscalar.o matlabstring.o matlabmatrix.o arrayofmatrices.o program.o matlabprogram.o lbfgsb.o
    ld: warning: in solver.o, file was built for i386 which is not the architecture being linked (x86_64)
    Undefined symbols:
    "_setulb_", referenced from:
    Program::callLBFGS(char const*)in program.o
    Program::runSolver() in program.o
    Program::runSolver() in program.o
    Program::runSolver() in program.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status

    mex: link of ' "lbfgsb.mexmaci64"' failed.

    make: *** [lbfgsb.mexmaci64] Error 1

    Irgendwas scheint mit dem 64 Bit nicht zu funktionieren. Deshalb habe ich im Makefile mal beim den gfortran das Flag -m64 hinzugefügt, was aber wiederrum zu einer neuen Fehlermeldung geführt hat, die auch das Fehlen von Symbolen bemängelt.

    Wie muss ich diese Fehlermeldung verstehen, und was kann ich dagegen unternehmen. Über Hinweise würde ich mich wirklich sehr freuen.



  • So ich habe jetzt mal ein bisschen weitergegooglet und habe das Makefile angepasst. Nun passiert folgendes:

    make
    gfortran  -O3 -x f77-cpp-input -fPIC -fno-common -m64 -o solver.o -c solver.f
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -arch x86_64 -m64 -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o matlabexception.o -c matlabexception.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -arch x86_64 -m64 -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o matlabscalar.o -c matlabscalar.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -arch x86_64 -m64 -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o matlabstring.o -c matlabstring.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -arch x86_64 -m64 -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o matlabmatrix.o -c matlabmatrix.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -arch x86_64 -m64 -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o arrayofmatrices.o -c arrayofmatrices.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -arch x86_64 -m64 -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o program.o -c program.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -arch x86_64 -m64 -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o matlabprogram.o -c matlabprogram.cpp
    g++ -O3 -fPIC -fno-common -fexceptions -no-cpp-precomp -arch x86_64 -m64 -Wall -ansi -DMATLAB_MEXFILE -I/Applications/MATLAB_R2009b.app/extern/include -o lbfgsb.o -c lbfgsb.cpp
    /Applications/MATLAB_R2009b.app/bin/mex -cxx CXX=g++ CC=g++ FC= LD=g++ -lm \
            -O -output lbfgsb.mexmaci64 solver.o matlabexception.o matlabscalar.o matlabstring.o matlabmatrix.o arrayofmatrices.o program.o matlabprogram.o lbfgsb.o
    Undefined symbols:
      "__gfortran_compare_string", referenced from:
          _setulb_ in solver.o
          _mainlb_ in solver.o
          _mainlb_ in solver.o
          _mainlb_ in solver.o
          _mainlb_ in solver.o
          _mainlb_ in solver.o
          _mainlb_ in solver.o
          _mainlb_ in solver.o
          _mainlb_ in solver.o
          _lnsrlb_ in solver.o
          _lnsrlb_ in solver.o
          _lnsrlb_ in solver.o
          _prn3lb_ in solver.o
          _dcsrch_ in solver.o
          _dcsrch_ in solver.o
          _dcsrch_ in solver.o
          _dcsrch_ in solver.o
      "__gfortran_transfer_real", referenced from:
          _mainlb_ in solver.o
          _mainlb_ in solver.o
          _mainlb_ in solver.o
    ... / hier kommt noch ne Menge von diesen undefined symbols / ...
          _prn3lb_ in solver.o
          _prn3lb_ in solver.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    
        mex: link of ' "lbfgsb.mexmaci64"' failed.
    
    make: *** [lbfgsb.mexmaci64] Error 1
    

    So wie ich das verstehe ist das Problem mit dem 64 Bit Zeug nun zwar gelöst, aber nun (bitte korrigiert mich wenn ich falsch liege) scheint er irgendwelche Bibliotheken nicht zu finden. Kann das sein?



  • Ja, sieht nach sehr grundlegenden Funktionen aus, könnte also durchaus eine Standard-Library sein, die da fehlt.


Anmelden zum Antworten