Anzeige:
Ergebnis 1 bis 4 von 4

Thema: cross compiling Linux -> windows

  1. #1
    onkel-pit
    Gast

    Question cross compiling Linux -> windows

    Hi,
    bin neu in diesem Forum und wünsche erstmal allen einen schönen guten Morgen.

    So, ich habe folgendes Problem. Ich möchte eine selbstgeschrieben DLL auf Linux cross compilen.

    Soweit so gut. Habe mingw32 via apt installiert und getestet.

    Habe das/die Makefile von Dev-Cpp abgeändert, da die DLL ursprünglich ein Dev-Cpp Projekt war.

    Hier das/die Makefile:

    Code:
    # Project: cosmo
    # Makefile created by Dev-C++ 4.9.9.1 edited by pit 1.0 ;)
    
    CPP  = i586-mingw32msvc-g++
    CC   = i586-mingw32msvc-gcc
    WINDRES = i586-mingw32msvc-windres
    RES  =
    OBJ  = dllmain.o dllsql.o $(RES)
    LINKOBJ  = dllmain.o dllsql.o $(RES)
    LIBS =  -L/usr/i586-mingw32msvc/lib -lmySQL --no-export-all-symbols --add-stdcall-alias
    INCS =  -I/usr/i586-mingw32msvc/include
    CXXINCS =  -I/usr/i586-mingw32msvc/include/c++/3.3.1  -I/usr/i586-mingw32msvc/include/c++/3.3.1/mingw32  -I/usr/i586-mingw32msvc/include/c++/3.3.1/backward -I/usr/i586-mingw32msvc/include
    BIN  = cosmo.dll
    CXXFLAGS = $(CXXINCS) -DBUILDING_DLL=1 -Wall
    CFLAGS = $(INCS) -DBUILDING_DLL=1 -Wall
    
    .PHONY: all all-before all-after clean clean-custom
    
    all: all-before cosmo.dll all-after
    
    
    clean: clean-custom
            rm -f $(OBJ) $(BIN)
    
    DLLWRAP=i586-mingw32msvc-dllwrap
    DEFFILE=libcosmo.def
    STATICLIB=libcosmo.a
    
    $(BIN): $(LINKOBJ)
            $(DLLWRAP) --output-def $(DEFFILE) --driver-name c++ --implib $(STATICLIB) $(LINKOBJ) $(LIBS) -o $(BIN)
    
    dllmain.o: dllmain.cpp
            $(CPP) -c dllmain.cpp -o dllmain.o $(CXXFLAGS)
    
    dllsql.o: dllsql.cpp
            $(CPP) -c dllsql.cpp -o dllsql.o $(CXXFLAGS)
    So das hier ist nun die Ausgabe von make:

    Code:
    pit@tioz:~/cosmo$ make
    i586-mingw32msvc-g++ -c dllmain.cpp -o dllmain.o -I/usr/i586-mingw32msvc/include/c++/3.3.1  -I/usr/i586-mingw32msvc/include/c++/3.3.1/mingw32 -I/usr/i586-mingw32msvc/include/c++/3.3.1/backward -I/usr/i586-mingw32msvc/include -DBUILDING_DLL=1 -Wall
    i586-mingw32msvc-g++ -c dllsql.cpp -o dllsql.o -I/usr/i586-mingw32msvc/include/c++/3.3.1  -I/usr/i586-mingw32msvc/include/c++/3.3.1/mingw32  -I/usr/i586-mingw32msvc/include/c++/3.3.1/backward -I/usr/i586-mingw32msvc/include -DBUILDING_DLL=1 -Wall
    i586-mingw32msvc-dllwrap --output-def libcosmo.def --driver-name c++ --implib libcosmo.a dllmain.o dllsql.o  -L/usr/i586-mingw32msvc/lib -lmySQL --no-export-all-symbols --add-stdcall-alias -o cosmo.dll
    i586-mingw32msvc-dllwrap: no export definition file provided.
    Creating one, but that may not be what you want
    /usr/bin/ld: unrecognized option '--base-file'
    /usr/bin/ld: use the --help option for usage information
    collect2: ld returned 1 exit status
    i586-mingw32msvc-dllwrap: c++ exited with status 1
    make: *** [cosmo.dll] Fehler 1
    Was mich wundert ist, dass er ld anstelle von i586-mingw32msvc-ld verwenden will.
    Habe ich schon mal /usr/bin/ld in ld.old umgenannt und i586...-ld nach /usr/bin/ld gelinkt.
    Dann kommt folgender Fehler:

    Code:
    tioz:/home/pit/cosmo# make
    i586-mingw32msvc-g++ -c dllmain.cpp -o dllmain.o -I/usr/i586-mingw32msvc/include/c++/3.3.1  -I/usr/i586-mingw32msvc/include/c++/3.3.1/mingw32 -I/usr/i586-mingw32msvc/include/c++/3.3.1/backward -I/usr/i586-mingw32msvc/include -DBUILDING_DLL=1 -Wall
    i586-mingw32msvc-g++ -c dllsql.cpp -o dllsql.o -I/usr/i586-mingw32msvc/include/c++/3.3.1  -I/usr/i586-mingw32msvc/include/c++/3.3.1/mingw32  -I/usr/i586-mingw32msvc/include/c++/3.3.1/backward -I/usr/i586-mingw32msvc/include -DBUILDING_DLL=1 -Wall
    i586-mingw32msvc-dllwrap --output-def libcosmo.def --driver-name c++ --implib libcosmo.a dllmain.o dllsql.o  -L/usr/i586-mingw32msvc/lib -lmySQL --no-export-all-symbols --add-stdcall-alias -o cosmo.dll
    i586-mingw32msvc-dllwrap: no export definition file provided.
    Creating one, but that may not be what you want
    /usr/bin/ld: unrecognised emulation mode: elf_i386
    Supported emulations: i386pe
    collect2: ld returned 1 exit status
    i586-mingw32msvc-dllwrap: c++ exited with status 1
    make: *** [cosmo.dll] Fehler 1
    Danke schonmal für die Hilfe im vorraus.

    MfG
    pit

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Hmm, ich hab da keine Lösung für das Crosscompiling, aber vielleicht wäre es einfacher Dev-Cpp direkt unter Wine zu starten und sozusagen "in Windows" zu kompilieren.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    onkel-pit
    Gast
    hm naja Dev-Cpp ließ sich bei mir nicht emulieren. Keine Ahnung warum.

    Aber es ist ja auch bloß ein falscher Flag der gesetzt wurde. Habe nämlich ld --help durchforstet und rausgefunden das der flag nur -b heißt. Aber das komische ist, ich habe diesen Flag nirgends gesetzt.

  4. #4
    onkel-pit
    Gast

    Lightbulb solved :D

    so habs nun gelöst.

    Hier die Befehle mit denen ich das bewerkstellige.

    Code:
    #!/bin/bash
    # compile
    i586-mingw32msvc-g++ dllmain.cpp dllsql.cpp  -Wall -c -I/usr/i586-mingw32msvc/include/c++/3.3.1  -I/usr/i586-mingw32msvc/include/c++/3.3.1/mingw32 -I/usr/i586-mingw32msvc/include/c++/3.3.1/backward -I/usr/i586-mingw32msvc/include -DBUILDING_DLL
    
    #link
    i586-mingw32msvc-g++ -shared -o cosmo.dll dllmain.o dllsql.o -I/usr/i586-mingw32msvc/include/c++/3.3.1  -I/usr/i586-mingw32msvc/include/c++/3.3.1/mingw32  -I/usr/i586-mingw32msvc/include/c++/3.3.1/backward -I/usr/i586-mingw32msvc/include -L/usr/i586-mingw32msvc/lib -L/usr/lib -lmysqlclient -lmySQL --add-stdcall-alias -Wall --out-implib libcosmo.a
    mfg pit

    P.S. habe gemerkt das man bei gcc bzw. g++ immer die source dateien an den anfang stellen sollte. hatte beim linken errors als die hinten standen.

    P.P.S. war bisher zu faul ne makefile zu schreiben, da es immer noch nicht tut. weil er dein einsprungspunkt zu mysql_connect nicht findet ...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •