IUP - статическая ссылка Windows SDK

Я хочу написать многоплатформенное нативное настольное приложение на C. После некоторых поисков я обнаружил, что IUP идеально подходит. К сожалению, я изо всех сил пытаюсь связать Windows SDK. Сейчас я просто хочу статически скомпилировать версию x64 для Windows 8.1. Когда я компилирую этот пример в Code::Blocks, я получаю следующие ошибки:

g++.exe -LC:\MinGW\iup -o "bin-debug\EVE Editor.exe" obj-debug\main.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:\MinGW\iup/libiup.a(iupwin_font.o):iupwin_font.c:(.text+0x1db): undefined reference to `__imp_CreateFontW'
C:\MinGW\iup/libiup.a(iupwin_font.o):iupwin_font.c:(.text+0x224): undefined reference to `__imp_SelectObject'
C:\MinGW\iup/libiup.a(iupwin_font.o):iupwin_font.c:(.text+0x240): undefined reference to `__imp_GetTextMetricsW'
C:\MinGW\iup/libiup.a(iupwin_font.o):iupwin_font.c:(.text+0x684): undefined reference to `__imp_SelectObject'
C:\MinGW\iup/libiup.a(iupwin_font.o):iupwin_font.c:(.text+0x734): undefined reference to `__imp_GetTextExtentPoint32W'

И так далее. Здесь документация IUP гласит: "Для Windows, если вы статически связываете приложение с IUP, вы должны также связать его с библиотеками ole32.lib и comctl32.lib (поставляются с компиляторами)". Итак, я получил Windows SDK и перекомпилировал с ole32 и comctl32. Я получил те же ошибки. Я также посмотрел руководство Code:: Blocks на той же странице, но оно для динамического связывания.

Я никогда не связывал Windows SDK раньше, поэтому я в растерянности. Вот мой проект Code:: Blocks:

<?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>

1 ответ

Решение

Попробуйте изменить порядок связывания. Порядок зависимости должен быть обратным, я имею в виду наименее зависимые библиотеки последними. Например:

        <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" />

И вам не нужно включать все библиотеки IUP, только те, которые вы на самом деле используете.

Другие вопросы по тегам