рдПрдХреНрд╕рдЯреЗрдВрд╢рди PHP рдФрд░ рдХреЛрдЯрд▓рд┐рди рдиреЗрдЯрд┐рд╡ред рднрд╛рдЧ рдПрдХ, рднреЛрд▓рд╛

рдпрд╣ рд▓реЗрдЦ рдХреЛрдЯрд▓рд┐рди рдореВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ PHP рд╡рд┐рд╕реНрддрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рднреЛрд▓реЗ рдФрд░ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде ред

рдпрд╣ рдмрд▓реНрдХрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдПрдХ рд╣реЗрдЬрд╣реЛрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реЗрдЬрд╣реЙрдЧ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реБрдЖред рдХреЛрдИ рд░рд╣рд╕реНрдпреЛрджреНрдШрд╛рдЯрди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдХреЛрдИ рдХрд╛рдо рдЖрдПрдЧрд╛ред

рддреЛ, рдЕрдЧрд░ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рд▓рдХреНрд╖реНрдп рдПрдХ рдлрд╝рдВрдХреНрд╢рди `рд╣реИрд▓реЛ ($ рдирд╛рдо)` рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ рдФрд░ `рд╣реИрд▓реЛ, $ рдирд╛рдо` рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рдХрд╣рддрд╛ рд╣реИ, рд╣рдо рднреЛрд▓реЗрдкрди рд╕реЗ рдлреИрд╕рд▓рд╛ рдХрд░реЗрдВрдЧреЗред

  1. рдХреЛрдЯрд▓рд┐рди рдкрд░ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
  2. рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ
  3. рд╢рд╛рд╕реНрддреНрд░реАрдп рддрд░реАрдХреЗ рд╕реЗ (рд╕реА рдореЗрдВ), рд╣рдо рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдЧрд╛

рдпрд╣ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдШрдиреЗ рдШрд╛рд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд▓рдХреАрд░ рдкрдбрд╝реА рд╣реИ:

  1. рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рд╕реА-рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕реА рдореЗрдВ рдХреЛрдЯрд▓рд┐рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ (рдареАрдХ рд╣реИ, рд╢рд╛рдпрдж рдореИрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рдерд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ)
  2. рдкрд╣рд▓реА рдмрд╛рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдХреЛрдЯрд▓рд┐рдирдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмреБрд░реА рдХрд┐рд╕реНрдордд рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдмрд╛рджрд▓ рдореЗрдВ рдореЗрд░реА рд▓рд┐рдирдХреНрд╕ рдЖрднрд╛рд╕реА рдорд╢реАрди рд╣реИред рдмрд┐рдирд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рднреА, рдЗрдВрдЯрд░рдиреЗрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
  3. рдпрд╣ рд░реЗрдХ C рдореЗрдВ рдЕрдиреБрднрд╡ рдХреА рдХрдореА рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд▓рд┐рдВрдХрд░ рдиреЗ рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯреНрд░реЛрд▓ рдХрд┐рдпрд╛ред

Red Hat Enterprise Linux рд╕рд░реНрд╡рд░ рд░рд┐рд▓реАрдЬрд╝ 7.5 рдкрд░ рд╕рдм рдХреБрдЫ рд╣реБрдЖред

рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ ... рдирд╣реАрдВ, рдХреЛрдЯрд▓рд┐рди рд╕рдВрдХрд▓рдХ рдирд╣реАрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, JDK рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗред
рдлрд┐рд░ рдХреЛрдЯрд▓рд┐рди рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдЬреАрдердм рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрдирдЬрд╝рд┐рдк рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реЛрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВред

рдПрдХ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╡рд╣ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдЗрдВрдЯрд░рдиреЗрдЯ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ (рдЬреЗрдЯрдмреНрд░реЗрди рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рд╕реЗ рдЧреБрдкреНрдд рдЬреНрдЮрд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ):

  • рд╣рдо рдХрд┐рд╕реА рднреА рд╕рд░рд▓ рдХреЛрдЯрд▓рд┐рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рд╕рдВрдХрд▓рдХ рдкрд░ рд╣рдереЗрд▓реА рд╕реЗ рдХреБрдЫ рд╣реЛ
  • рд╣рдо $ KOTLIN_HOME / bin / kotlinc SimpleScript.kt рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдереЛрдбрд╝рд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ CTRL + C рджрдмрд╛рддреЗ рд╣реИрдВ - рдпрд╣ рдШрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ
  • рд╣рдо рдЕрдкрдиреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ $ KOTLIN_HOME / konan / konan.properties рдХреЛ рджреЗрдЦреЗрдВ, рдФрд░ рдЖрдЗрдЯрдо рджреЗрдЦреЗрдВ:

dependencies.linux_x64 = \ clang-llvm-5.0.0-linux-x86-64 \ target-gcc-toolchain-3-linux-x86-64 \ libffi-3.2.1-2-linux-x86-64 

  • рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред
  • рд╣рдо рдпрд╣ рд╕рдм ~ / .konan / cache рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд▓рд┐рдирдХреНрд╕ рд╣реЛрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдПрдХ рдЯрд┐рд▓реНрдб рд╣реИ)

рдЕрдм, рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрди рд╡рд┐рддрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЖрдХрд╛рд░ рдореЗрдВ рдмрд╣реБрдд рдЫреЛрдЯреА рдирд╣реАрдВ рд╣реИрдВ рдФрд░, рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореЗрд░реА рдШрд░реЗрд▓реВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ 3.4 рдЬреАрдмреА рднрд╛рд░реА рд╣реЛ рдЧрдИ рд╣реИред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреЗ рд╣реЛрдорд╡рд░реНрдХ рдХреЗ рддрд╣рдд рдПрдХ рдЕрд▓рдЧ рд╡реЙрд▓реНрдпреВрдо рд╣реИ, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдмрд╛рдж рдореЗрдВ, рдорд╛рдирдХ рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд╕рд╛рде, php рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд php-devel рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдЗрд╕ рдкрд░, рддреИрдпрд╛рд░реА рдХреЗ рдЙрдкрд╛рдп рдЦрддреНрдо рд╣реЛ рдЧрдП рд╣реИрдВред

рдЪреВрдВрдХрд┐ рдпрд╣ PHP рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдмрд╕реЗ рдХрдо рд╕рдВрднрд╡ рдХреЛрдб рдХреЗ рд╕рд╛рде рдорд┐рд▓реЗрдВрдЧреЗред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдХреЛрдЯрд▓рд┐рди рд╕реЗ


hellokt.kt

 fun kt_print(string:String){ println("Hello, $string!!!") } 

рд╡рд┐рднрд┐рдиреНрди рдореИрдиреБрдЕрд▓ рдФрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓реНрд╕ рдореЗрдВ, рдХреЛрдЯрд▓рд┐рдирдХ рдпрд╛ рдХреЛрдиреИрдВрдХ рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рднреНрд░рд╛рдордХ рд╣реИред рддреЛ - рдпрд╣ рдПрдХ рд╣реА рдмрд╛рдд рд╣реИред рдпрд╣рд╛рдБ рд╕рдмреВрдд рд╣реИ:


рд╕рдВрдХрд▓рди

 # $KOTLINC_HOME/kotlinc -opt ./hellokt.kt -o hellokt -produce dynamic 

-рдСрдкреНрдЯ рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЫреЛрдЯреА рд╣реИред -рдкреНрд░реЛрдбрдХреНрдЯрд┐рд╡ рдбрд╛рдпрдирд╛рдорд┐рдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╡рд░реНрддрдорд╛рди рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред

рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреА: libhellokt.so рдФрд░ hellokt_api.hред рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдкрд╕рд░реНрдЧ рдФрд░ рдкреНрд░рддреНрдпрдп рд╕реНрд╡рддрдГ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ (рд╢рд╛рдпрдж) рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдРрд╕реА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИред

 #ifndef KONAN_HELLOKT_H #define KONAN_HELLOKT_H #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus typedef bool hellokt_KBoolean; #else typedef _Bool hellokt_KBoolean; #endif typedef char hellokt_KByte; typedef unsigned short hellokt_KChar; typedef short hellokt_KShort; typedef int hellokt_KInt; typedef long long hellokt_KLong; typedef float hellokt_KFloat; typedef double hellokt_KDouble; typedef void* hellokt_KNativePtr; struct hellokt_KType; typedef struct hellokt_KType hellokt_KType; typedef struct { /* Service functions. */ void (*DisposeStablePointer)(hellokt_KNativePtr ptr); void (*DisposeString)(const char* string); hellokt_KBoolean (*IsInstance)(hellokt_KNativePtr ref, const hellokt_KType* type); /* User functions. */ struct { struct { void (*kt_print)(const char* string); } root; } kotlin; } hellokt_ExportedSymbols; extern hellokt_ExportedSymbols* hellokt_symbols(void); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* KONAN_HELLOKT_H */ 

рд╣рдорд╛рд░реЗ kt_print рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд╣реБрдВрдЪ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧреАред

 hellokt_symbols()->kotlin.root.kt_print(char *); 

рдореИрдВ рдЖрдкрдХреЛ рдиреАрдЪреЗ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ - рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рд╣реИрдВред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рддреИрдпрд╛рд░ рд╣реИ, рд╕реА рдкрд░ рдЬрд╛рдПрдВ


config.m4 ( рдЗрд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ )

 PHP_ARG_ENABLE(hello, whether to enable hello support,[ --enable-hello Enable hello support]) if test "$PHP_HELLO" != "no"; then PHP_ADD_LIBRARY_WITH_PATH(hellokt, /path/to/compiled/library, HELLO_SHARED_LIBADD) PHP_NEW_EXTENSION(hello, hello.c, $ext_shared) PHP_SUBST(HELLO_SHARED_LIBADD) fi 

рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг config.m4 рдореЗрдВ рджреЗрдЦреА рдЧрдИ рдкрд╣рд▓реА рдмрд╛рдд, рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ, PHP_ARG_WITH () рдФрд░ PHP_ARG_ENABLE () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреАрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВред
...
рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдирд╛рдо рдХреЗ рд╕рд╛рде рдХрдо рд╕реЗ рдХрдо рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ PHP рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХреЗрдВ рдпрд╛ рдирд╣реАрдВ рдЪреБрди рд╕рдХреЗрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ PHP_ADD_LIBRARY_WITH_PATH рдореЗрдВ, рдкрд╣рд▓рд╛ рддрд░реНрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд╛рдо рд╣реИред рд▓рд┐рдмреЗрд▓реНрд╣реЙрдХ рдирд╣реАрдВ, рдЕрд░реНрдерд╛рддреН рд╣реЗрд▓реНрд▓реЛрдХреНрдЯред рдореИрдВрдиреЗ рджреЛ рдШрдВрдЯреЗ рддрдХ рдорд╛рд░ рдбрд╛рд▓рд╛ рдЬрдм рддрдХ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓ рдЧрдпрд╛ рдХрд┐ ld рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреНрдпреЛрдВ рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрддрд╛ред (рдпрд╣рд╛рдБ рд╡рд╣ рд▓рд┐рдВрдХрд░ рдмрджрдорд╛рд╢реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдХрд╣рд╛рдиреА рд╣реИ)ред

рдЕрдм, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛрдб рд╣реА

hello.c

 #include "php.h" //    #include "hellokt_api.h" #define PHP_MY_EXTENSION_VERSION "1.0" #define PHP_MY_EXTENSION_EXTNAME "hello" PHP_FUNCTION(hello); static zend_function_entry hello_functions[] = { PHP_FE(hello, NULL) }; zend_module_entry hello_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif PHP_MY_EXTENSION_EXTNAME, hello_functions, NULL, NULL, NULL, NULL, NULL, #if ZEND_MODULE_API_NO >= 20010901 PHP_MY_EXTENSION_VERSION, #endif STANDARD_MODULE_PROPERTIES }; ZEND_GET_MODULE(hello) PHP_FUNCTION(hello) { char * name; size_t name_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { RETURN_NULL(); } hellokt_symbols()->kotlin.root.kt_print(name); //   efree(name); } 

PHP рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА рдХреБрдЫ рд▓реЗрдЦ рд╣реИрдВ, рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдореМрдЬреВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЦреБрдж рдХреЛ zend_parse_parameters рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджреВрдВрдЧрд╛ - рдпрд╣ рдЬрдЧрд╣ рдореЗрдВ рд╣реЛрдЧрд╛ред

рдареАрдХ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рд▓реБрдврд╝рдХрд╛ рд╣реБрдЖ рд╣реИ:

 # $PHP_PATH/phpize # ./configure --with-php-config=$PHP_PATH/php-config # make # $PHP_PATH/php -dextension=./modules/hello.so -r "echo hello('World');" Hello, World!!! 

рдмреЛрдирд╕, рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдкреИрдХреЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдо рдлреЗрдВрдЧ рд╢реБрдИ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдФрд░ рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрдВрдзрд╛ рдХрд░ рд░рд╣реЗ рдереЗред

 package hello.kt; public class HelloKt { fun kt_print(string: String) { println("Hello, $string!!!") } } 

рдпрд╣рд╛рдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

 hellokt_kref_hello_kt_HelloKt helloKt = { 0 }; if(!helloKt.pinned){ helloKt = hellokt_symbols()->kotlin.root.hello.kt.HelloKt.HelloKt(); } hellokt_symbols()->kotlin.root.hello.kt.HelloKt.kt_print(helloKt, name); 

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ? рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐, рд╕реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдХрдо рдХрд░рдирд╛ рдФрд░, рдХреНрдпрд╛ рдирд░рдХ рдордЬрд╝рд╛рдХ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдПрдХ рдорд┐рдиреА рд░реВрдкрд░реЗрдЦрд╛ - рдРрд╕реА рдЪреАрдЬреЗрдВред рдореБрдЭреЗ рд╢реБрднрдХрд╛рдордирд╛рдПрдБ! :)

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


All Articles