2017-03-07 1 views
1

Je veux écrire une application multiplateforme native de bureau en C. Après quelques recherches, j'ai trouvé que IUP correspondait parfaitement. Malheureusement, j'ai du mal à relier le SDK de Windows. Pour l'instant, je veux juste compiler statiquement la version x64 pour Windows 8.1. Quand je compile par exemple this dans le code de blocs, je reçois les erreurs suivantes: Et ainsi de suite et ainsi de suiteIUP - Lien statique SDK Windows

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' 

. Here la documentation IUP dit "Pour Windows, si vous liez statiquement l'application avec IUP, vous devez également lier avec les bibliothèques ole32.lib et comctl32.lib (fournies avec les compilateurs)." J'ai donc obtenu le SDK Windows de here et recompilé avec ole32 et comctl32. J'ai les mêmes erreurs. J'ai aussi regardé le guide Code :: Blocks sur la même page, mais c'est pour la liaison dynamique.

Je n'ai jamais lié le SDK Windows auparavant, donc je suis à court de ressources. Voici mon projet 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> 

Répondre

2

Essayez de changer l'ordre dans lequel la liaison est effectuée. L'ordre de dépendance doit être inversé, je veux dire que les bibliothèques les moins dépendantes durent. Par exemple:

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

Et vous n'avez pas besoin d'inclure toutes les bibliothèques IUP, juste celles que vous utilisez réellement.

+0

Merci! Il s'avère que c'était l'ordre des liens. Si vous voulez compiler uniquement le tutoriel, vous avez besoin de libiup.a, comctl32, ole32 et uuid dans cet ordre. – DragonDePlatino