2017-03-07 10 views
1

C에서 다중 플랫폼 네이티브 데스크톱 응용 프로그램을 작성하려고합니다. 일부 검색 후에 IUP이 가장 적합합니다. 불행히도 Windows SDK를 연결하는 데 어려움을 겪고 있습니다. 지금은 Windows 8.1 용 x64 버전을 정적으로 컴파일하려고합니다. 등IUP - Windows SDK 정적 링크

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' 

등등과 : 나는 코드 :: 블록에서 this 예를 컴파일 할 때, 나는 다음과 같은 오류를 얻을. Here IUP 설명서에서 "Windows의 경우 IUP와 응용 프로그램을 정적으로 연결하는 경우 컴파일러와 함께 제공되는 ole32.lib 및 comctl32.lib 라이브러리와도 링크해야합니다." 그래서 here에서 Windows SDK를 얻었고 ole32와 comctl32로 다시 컴파일했습니다. 나는 같은 오류가있다. 또한 같은 페이지에서 Code :: Blocks 가이드를 살펴 보았지만 역동적 인 링크를 위해 사용되었습니다.

나는 전에 Windows SDK를 연결 한 적이 없어서 실망했습니다. 여기 내 코드 :: 블록 프로젝트입니다 :

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

답변

2

연결이 완료된 순서를 변경하십시오. 의존성 순서가 바뀌어야합니다. 적어도 종속 라이브러리가 마지막에 있어야합니다. 예 :

 <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 라이브러리를 모두 포함 할 필요는 없습니다. 실제로 사용하는 라이브러리 만 포함하면됩니다.

+0

감사합니다. 링크 주문이라고 밝혀졌습니다. 튜토리얼을 컴파일하고 싶다면 libiup.a, comctl32, ole32 및 uuid 순으로 필요합니다. – DragonDePlatino