рдЕрдЬрдЧрд░, рдореЙрдбреНрдпреВрд▓, SWIG, рд╡рд┐рдВрдбреЛрдЬ

рдпрд╣ рд▓реЗрдЦ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдореЗрд░реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИред рдореБрдЭреЗ LibRaw рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рддред

рдЖрдЦрд┐рд░реА рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ 2004 рдореЗрдВ C ++ рдореЗрдВ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрд╛ рдерд╛ред рд╕реНрдЯрд┐рд▓рдмреЛрд░реНрди рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ (рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдирд╣реАрдВ) рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдореИрдВрдиреЗ рд╡реЗрддрди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреМрд╢рд▓ рдХреЛ рдмреЗрд╡рдХреВрдлреА рд╕реЗ рдмреЗрдЪ рджрд┐рдпрд╛)ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдХреМрд╢рд▓ рддрдп рдирд╣реАрдВ рд╣реИрдВред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ SWIG рдиреЗ рдореЗрд░реЗ рдХрд╛рдо рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдФрд░ "рдкреЗрди" рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрдиреЗ рдиреЗ рдЗрд╕реЗ рддреЛрдбрд╝ рджрд┐рдпрд╛ред рдореЗрд░реА рд╕реНрдореГрддрд┐ рдкреЗрд╢реЗрд╡рд░ рд╣реИ - рдЕрд░реНрдерд╛рдд, рдЪрдпрдирд╛рддреНрдордХ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкрд╣рд▓реЗ рдХреВрджрдирд╛ рдкрдбрд╝рд╛ред

рдпрд╣ рд▓реЗрдЦ рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП SWIG рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред SWIG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ C / C ++ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдирд╛ рд╕рдм рдХреБрдЫ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ (рд╡реИрд╕реЗ, рдореБрдЭреЗ рдпрд╣ рдзрд╛рд░рдгрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдкреНрд░рддрд┐рдорд╛рди рд╣реИ)ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдпреИрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдЪрдврд╝ рдЧрдпрд╛ред рдПрдкрд┐рдХ рдлреЗрд▓ - рд╕рднреА рдЯрд┐рдкреНрд╕ рдФрд░ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рддреАрди рд╕рд╛рд▓ рдкреБрд░рд╛рдиреЗ рд╣реИрдВред рдЙрдирдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд╕реНрд░реЛрдд рд╕реЗ рдЕрдЬрдЧрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрджрдо рдЙрдард╛рдирд╛ рдкрдбрд╝рд╛ред рд▓реЗрдЦ рдореЗрдВ рдХреЛрдИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрджрдо рдирд╣реАрдВ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЬрдЧрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЯрд┐рдк: рдлрд╝рд╛рдЗрд▓ рдХреЛ "рдмреЙрдХреНрд╕рд┐рдВрдЧ" рдбрд┐рд▓реАрд╡рд░реА рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ / pycohfig.h рд▓реЗрдВ рдФрд░ рдЪреБрдкрдЪрд╛рдк рдЗрд╕реЗ рдЗрдХрдЯреНрдареЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдбрд╛рд▓реЗрдВ - рдпрд╣ рдХрд╛рдо рдореЗрдВ рдЖрдПрдЧрд╛ред

рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИред рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Microsoft Visual C ++ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕рдВрд╕реНрдХрд░рдг 2008 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдпрдерди 2.6+ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдпрд╛ рддреЛ рд╕реНрд░реЛрдд рд╕реЗ рдЕрдЬрдЧрд░ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдерд╛, рдпрд╛ рд╡реАрд╕реА ++ 7.0 рдЦреЛрджрдХрд░ рдХрд╛рдИ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд░рдирд╛ рдерд╛, рдФрд░ рддрдм рднреА 6.0ред рдЗрд╕рд╕реЗ рднреА рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ MinGW рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реИрд╕реЗ? рдореИрдВрдиреЗ рд╕реНрдЯреНрд░рд╛рдмреЗрд░реА рдкрд░реНрд▓ рдореЗрдВ "рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓" рдкрд░реАрдХреНрд╖рдг рдореЙрдбреНрдпреВрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ (рдпрджрд┐ рдЖрдк рдкреНрд░рд╛рдЪреАрди рдЕрдЬрдЧрд░-рдореЛрддреА рдпреБрджреНрдз рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХрд╛рдлреА рд╕рдирдХреА рд╣реИрдВ)ред рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдкрд╛рде рдореЗрдВ рдкрд╣рд▓рд╛ gcc рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ SWIG рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдиреЗ рдФрд░ рдЗрд╕реЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рд╡рд┐рдВрдбреЛрдЬ (swigwin-2.0.4) рдХреЗ рддрд╣рдд рдирд┐рд░реНрдорд┐рдд SWIG рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ PATH рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВред

рд╡рд┐рдзрд┐ рдПрдХ: рд╡рд┐рдЬреБрдЕрд▓ C ++


рд╣рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

  PYTHON_INCLUDE = C: \ Python \ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ
 PYTHON_LIB = C: \ Python \ Libs \ python27.lib 


рдлрд┐рд░ рдЖрдк рдЪрд╛рд░реЛрдВ рдУрд░ рдмреЗрд╡рдХреВрдл рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ - рддреИрдпрд╛рд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд▓реЗ рд▓реЛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди (.sln) рдФрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд╣рд▓реЗ рд╣реА рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдФрд░ рд╢рд╛рдВрддрд┐ рд╕реЗ, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЕрдкрдирд╛ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SWIG\Examples\python\class\exmple.sln ред examples.i рдирд╛рдо рджреЗрдВ mymodule.i , mymodule.cxx рдФрд░ mymodule_wrap.cxx , рдХреНрд░рдорд╢рдГ, mymodule.i , mymodule.cxx рдФрд░ mymodule_wrap.cxx рдирд╛рдо рдмрджрд▓реЗрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреБрднрд╡ рдЕрднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд╛рд░рдХ рдХреЙрдорд░реЗрдб рдХреЗ рд▓рд┐рдП, рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдПрдХ рдХреБрдХреА рдирд┐рд░реНрджреЗрд╢ ред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдереЛрдбрд╝рд╛ рдкреБрд░рд╛рдирд╛ (рдпрд╛ рд╢рд╛рдпрдж рдмрд╣реБрдд рдирдпрд╛)ред рдЗрд╕рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ред рдиреАрдЪреЗ рд░реВрд╕реА рдореЗрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд:
  1. рд╡рд┐рдВрдбреЛрдЬ DLL рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ
  2. рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ / рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП my_module.cxx (рдпрд╛ .c) рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП my_module.i ред рдФрд░ рд╣рдо ( my_module_wrap.cxx ) my_module_wrap.cxx рдкрд╣рд▓реА рджреЛ рдлрд╛рдЗрд▓реЗрдВ, рдмреЗрд╢рдХ, рдореИрдВ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХрд╛рдЯрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)
  3. рд╣рдо рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪреБрдиреЗрдВ my_module.i , рдЧреБрдгреЛрдВ рдореЗрдВ ( рдХрд╕реНрдЯрдо рдмрд┐рд▓реНрдб рд╕реЗрдЯрдЕрдк ) рд╕реЗрдЯ:
    - рдХрдорд╛рдВрдб рд▓рд╛рдЗрди : swig.exe -c++ -python $(InputPath)
    - рдЖрдЙрдЯрдкреБрдЯ : $(InputName)_wrap.cxx
    (C рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ -c++ рд╕реНрд╡рд┐рдЪ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ .cxx рдПрдХреНрд╕рдЯреЗрдВрд╢рди (.c рдорддрд╛рдзрд┐рдХрд╛рд░)ред
    рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝рд╛рдЗрд▓ my_module.i рд╕реЗ my_module_wrap.c(xx) рдлрд╝рд╛рдЗрд▓ my_module.i
  4. рдЖрдЧреЗ рдЖрдкрдХреЛ рдЕрдЬрдЧрд░ рд╣реЗрдбрд░ рдХрд╛ рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЧреБрдгреЛрдВ рдореЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЧреБрдг рдЪреБрдиреЗрдВ "/ C ++ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ $(PYTHON_INCLUDE) рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ (рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЙрд╕реЗ рд╡реНрдпрд░реНрде рдореЗрдВ рдХреБрдЫ рднреА рдкреВрдЫрд╛ рд╣реИ?)
  5. рд▓рд┐рдВрдХрд░ рдХреЗ рдЧреБрдгреЛрдВ рдХреА рдпреЛрдЬрдирд╛ рдкрд░ рдЖрдЧреЗ (рд▓рд┐рдВрдХрд░):
    - рдЗрдирдкреБрдЯ ┬╗рд╕рд╢рд░реНрдд рдирд┐рд░реНрднрд░рд┐рдпрд╛рдБ : "$(PYTHON_LIB)"
    - рд╕рд╛рдорд╛рдиреНрдп ┬╗рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ : $(ProjectDir)\_$(ProjectName).pyd
    рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдЪреЛрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ, рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ - рдореИрдВ рдиреАрдЪреЗ рдмрддрд╛рдКрдВрдЧрд╛
  6. рдЖрдк рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд░рд┐рд▓реАрдЬрд╝ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВред рдбреАрдмрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рд╕реЗ рдЕрдЬрдЧрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
  7. рд▓рд╛рдн


рд╡рд┐рдзрд┐ рджреЛ: distutils


рдЖрдирдиреНрджрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди 2.7 рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рд╕реНрдЯреБрдЯрд┐рд▓реНрд╕ (рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, 3 рдХрд┐рд▓реЛрдЧреНрд░рд╛рдо shamanism рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбреНрдпреВрд▓ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╣рдо рдЙрдкрд░реЛрдХреНрдд рджреЛрдиреЛрдВ (рд░рд╛рдд рддрдХ рдирд╣реАрдВ) рдПрдорд╡реАрд╕реА 2008 рдФрд░ рдореБрдХреНрдд рдорд┐рдВрдЬ рдбрдмреНрд▓реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╣рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЫреЛрдЯреА рд░реЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдорд╛рдерд╛ рд╕рд╣рд▓рд╛рдпрд╛, рдЕрдм рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ред

рдлрд┐рд░, рд╣рдо SWIG рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрдорд╛рдирд╡реАрдп рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рддреЛ, SWIG/examples/classes рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, setup.py рдмрдирд╛рдПрдБ

 # -*- coding: utf-8 -*- import distutils from distutils.core import setup, Extension setup(name = "Simple example from the SWIG website", version = "0.007", ext_modules = [Extension( "_example", #  :    ["example.i","example.cxx"], swig_opts=['-threads', '-c++'], #  :  swig  )] ); 


рдкрд╣рд▓реА рд░реЗрдХред

рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ LINK : error LNK2001: unresolved external symbol initexample ред

рдпрд╣ рдХрд╣рд╛рдБ рд╕реЗ рдЙрдЧрддрд╛ рд╣реИ?

рдкрд╛рдпрдерди, рдЬрдм рдореЙрдбреНрдпреВрд▓ "рд╣рд╛рде рд╕реЗ" рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рд┐рдд рдореЙрдбреНрдпреВрд▓ (рдмрд╛рдЗрдирд░реА рднрд╛рдЧ) рдореЗрдВ init<_> рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдЧрд╛ред рдпрд╣ рдЗрд╕рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ C / C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрд╛рдЗрдирд░реА рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдкрд░ рдЗрд╕рдХрд╛ рд╕реНрд╡рд╛рдж рд▓реЗ рд╕рдХреЗ (рдФрд░ рдЕрдЬрдЧрд░ рдХреЛ рдмрддрд╛рдПрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ)ред рд╡реНрд░рдкрд░ (SWIG) рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди SWIG рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рджреЛ (!) <_>.py рдмрдирд╛рддрд╛ рд╣реИ: <_>.py рдПрдХ рдЕрдЬрдЧрд░ рдЖрд╡рд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рдореЙрдбреНрдпреВрд▓ рдФрд░ _<_>.pyd рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреЗрд╢реА рдХреЙрд▓ _<_>.pyd (рдзреНрдпрд╛рди рджреЗрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░) рдПрдХ рдмрд╛рдЗрдирд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдмрд╛рдЗрдирд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдореВрд▓ рдПрдХ (рдЕрдВрдбрд░рд╕реНрдХреЛрд░ "рдирд┐рд╣рд┐рдд") рдХреЗ рд╕рдорд╛рди import рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде "рдЕрдЬрдЧрд░ рдореЗрдВ" рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рджреЗрд╢реА рд░реИрдкрд░ рдФрд░ рдмрд╛рдЗрдирд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдирд╛рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рд╡реЗ рдЕрд▓рдЧ - рдЕрд▓рдЧ рд╣реИрдВред

SWIG рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдмрд╛рдЗрдирд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП, init_ <рдореЙрдбреНрдпреВрд▓_name> рдирд╛рдордХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдВрдХрд░ рдХреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИред рд╡рд╣ рдЧрд▓рддреА рд╣реИред

рджреВрд╕рд░реА рд░реЗрдХ

рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕реНрд░реЛрдд рдкрд░ рдЪрдврд╝рдиреЗ рдореЗрдВ рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рд▓рдЧрд╛ рдХрд┐ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╕реНрд╡рд╛рдЗрдЧ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЙрд▓ рдореЗрдВ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, distutil рд╣рдореЗрдВ рд╕реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, -c++ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ ( -threads рдкреИрд░рд╛рдореАрдЯрд░ "рд╢реЛ-рдСрдл рдХреЗ рд▓рд┐рдП" рдЬреЛрдбрд╝рд╛ -threads , рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

рд╕рднрд╛

рдЕрдм рд╣рдо рд╕рдордЭ рдЧрдП рд╣реИрдВ, рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:

MVC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ:
python setup.py build

MinGW рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ:
python setup.py build -cmingw32

рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рднреА рдЕрдЬреАрдм рд╣реИред

рдХрд┐рд╕реА рднреА рд╕рд▓рд╛рд╣ (рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓) рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрд▓реЛрдЪрдирд╛, рднреА (рд▓реЗрдХрд┐рди рдЕрдзрд┐рдорд╛рдирддрдГ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ)ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрд╣рд▓реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рдж рдЬреЛ рд╣реБрдЖ рдЙрд╕рд╕реЗ рдЖрдзреЗ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЗрдЦ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝реА рдЧрд╣рд░рд╛рдИ рдЦреЛрджреАред

Source: https://habr.com/ru/post/In139790/


All Articles