c - IUP - Windows SDK statisk link

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil skrive en multiplatform, native desktop applikation i C. Efter nogle søgning fandt jeg IUP at være den perfekte pasform. Desværre kæmper jeg for at forbinde Windows SDK. For nu vil jeg bare statisk kompilere x64-versionen til Windows 8.1. Når jeg kompilerer dette eksempel i Code :: Blocks, får jeg følgende fejl: [4] [5]


g++.exe -LC:MinGWiup -o "bin-debugEVE Editor.exe" obj-debugmain.o   -lgdi32 -luser32 -lkernel32 -lcomctl32 -lole32 -lfreetype6 -liup -liup\_mglplot -liup\_plot -liup\_scintilla -liupcd -liupcontrols -liupgl -liupglcontrols -liupim -liupimglib -liupmatrixex -liupole -liuptuio -lz
C:MinGWiup/libiup.a(iupwin\_font.o):iupwin\_font.c:(.text+0x1db): undefined reference to `\_\_imp\_CreateFontW'
C:MinGWiup/libiup.a(iupwin\_font.o):iupwin\_font.c:(.text+0x224): undefined reference to `\_\_imp\_SelectObject'
C:MinGWiup/libiup.a(iupwin\_font.o):iupwin\_font.c:(.text+0x240): undefined reference to `\_\_imp\_GetTextMetricsW'
C:MinGWiup/libiup.a(iupwin\_font.o):iupwin\_font.c:(.text+0x684): undefined reference to `\_\_imp\_SelectObject'
C:MinGWiup/libiup.a(iupwin\_font.o):iupwin\_font.c:(.text+0x734): undefined reference to `\_\_imp\_GetTextExtentPoint32W'


Og så videre og så videre. Her står iUP-dokumentationen 'For Windows, hvis du statisk linker programmet med IUP, skal du også linke med bibliotekerne ole32.lib og comctl32.lib (leveres sammen med kompilatorerne).' Så jeg fik Windows SDK herfra og genkompileret med ole32 og comctl32. Jeg fik de samme fejl. Jeg kiggede også på Code :: Blocks guide på samme side, men det er for dynamisk linking. [6] [7]


Jeg har aldrig bundet Windows SDK før, så jeg er tabt. Her er min kode :: Blokke projekt:


<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks\_project\_file>
    <FileVersion major="1" minor="6" />
    <Project>
        <Option title="EVE Editor" />
        <Option pch\_mode="2" />
        <Option compiler="gcc" />
        <Build>
            <Target title="Debug">
                <Option output="bin-debug/EVE Editor" prefix\_auto="1" extension\_auto="1" />
                <Option object\_output="obj-debug/" />
                <Option type="1" />
                <Option compiler="gcc" />
                <Compiler>
                    <Add option="-g" />
                </Compiler>
            </Target>
            <Target title="Release">
                <Option output="bin/EVE Editor" prefix\_auto="1" extension\_auto="1" />
                <Option object\_output="obj/" />
                <Option type="0" />
                <Option compiler="gcc" />
                <Compiler>
                    <Add option="-O2" />
                </Compiler>
                <Linker>
                    <Add option="-s" />
                </Linker>
            </Target>
        </Build>
        <Compiler>
            <Add option="-Wall" />
            <Add directory="C:/MinGW/iup/include" />
        </Compiler>
        <ResourceCompiler>
            <Add directory="C:/MinGW/iup/etc" />
        </ResourceCompiler>
        <Linker>
            <Add library="gdi32" />
            <Add library="user32" />
            <Add library="kernel32" />
            <Add library="comctl32" />
            <Add library="ole32" />
            <Add library="libfreetype6.a" />
            <Add library="libiup.a" />
            <Add library="libiup\_mglplot.a" />
            <Add library="libiup\_plot.a" />
            <Add library="libiup\_scintilla.a" />
            <Add library="libiupcd.a" />
            <Add library="libiupcontrols.a" />
            <Add library="libiupgl.a" />
            <Add library="libiupglcontrols.a" />
            <Add library="libiupim.a" />
            <Add library="libiupimglib.a" />
            <Add library="libiupmatrixex.a" />
            <Add library="libiupole.a" />
            <Add library="libiuptuio.a" />
            <Add library="libz.a" />
            <Add directory="C:/MinGW/iup" />
        </Linker>
        <Unit filename="main.c">
            <Option compilerVar="CC" />
        </Unit>
        <Extensions>
            <code\_completion />
            <envvars />
            <debugger />
            <lib\_finder disable\_auto="1" />
        </Extensions>
    </Project>
</CodeBlocks\_project\_file>

Bedste reference


Prøv at ændre den rækkefølge, linkingen er lavet. Berøringsordren skal vendes, jeg mener mindst afhængige biblioteker sidst. For eksempel:


        <Add library="libiupcontrols.a" />   -- optional
        <Add library="libiupcd.a" />         -- optional
        <Add library="libcd.a" />         -- optional
        <Add library="libfreetype6.a" />  -- optional
        <Add library="libz.a" />  -- optional
        <Add library="libiup.a" />
        <Add library="gdi32" />
        <Add library="user32" />
        <Add library="kernel32" />
        <Add library="comctl32" />
        <Add library="ole32" />


Og du behøver ikke at inkludere alle IUP-biblioteker, bare dem, du rent faktisk bruger.