
рдпрд╣ рд▓реЗрдЦ рдХреЛрдЯрд▓рд┐рди рдореВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ PHP рд╡рд┐рд╕реНрддрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рднреЛрд▓реЗ рдФрд░ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди
рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде ред
рдпрд╣ рдмрд▓реНрдХрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдПрдХ рд╣реЗрдЬрд╣реЛрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реЗрдЬрд╣реЙрдЧ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реБрдЖред рдХреЛрдИ рд░рд╣рд╕реНрдпреЛрджреНрдШрд╛рдЯрди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдХреЛрдИ рдХрд╛рдо рдЖрдПрдЧрд╛ред
рддреЛ, рдЕрдЧрд░ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рд▓рдХреНрд╖реНрдп рдПрдХ рдлрд╝рдВрдХреНрд╢рди `рд╣реИрд▓реЛ ($ рдирд╛рдо)` рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ рдФрд░ `рд╣реИрд▓реЛ, $ рдирд╛рдо` рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рдХрд╣рддрд╛ рд╣реИ, рд╣рдо рднреЛрд▓реЗрдкрди рд╕реЗ рдлреИрд╕рд▓рд╛ рдХрд░реЗрдВрдЧреЗред
- рдХреЛрдЯрд▓рд┐рди рдкрд░ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
- рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ
- рд╢рд╛рд╕реНрддреНрд░реАрдп рддрд░реАрдХреЗ рд╕реЗ (рд╕реА рдореЗрдВ), рд╣рдо рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдЧрд╛
рдпрд╣ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдШрдиреЗ рдШрд╛рд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд▓рдХреАрд░ рдкрдбрд╝реА рд╣реИ:
- рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рд╕реА-рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕реА рдореЗрдВ рдХреЛрдЯрд▓рд┐рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ (рдареАрдХ рд╣реИ, рд╢рд╛рдпрдж рдореИрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рдерд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ)
- рдкрд╣рд▓реА рдмрд╛рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдХреЛрдЯрд▓рд┐рдирдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмреБрд░реА рдХрд┐рд╕реНрдордд рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдмрд╛рджрд▓ рдореЗрдВ рдореЗрд░реА рд▓рд┐рдирдХреНрд╕ рдЖрднрд╛рд╕реА рдорд╢реАрди рд╣реИред рдмрд┐рдирд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рднреА, рдЗрдВрдЯрд░рдиреЗрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
- рдпрд╣ рд░реЗрдХ 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 { void (*DisposeStablePointer)(hellokt_KNativePtr ptr); void (*DisposeString)(const char* string); hellokt_KBoolean (*IsInstance)(hellokt_KNativePtr ref, const hellokt_KType* type); struct { struct { void (*kt_print)(const char* string); } root; } kotlin; } hellokt_ExportedSymbols; extern hellokt_ExportedSymbols* hellokt_symbols(void); #ifdef __cplusplus } #endif #endif
рд╣рдорд╛рд░реЗ 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"
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);
рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ? рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐, рд╕реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдХрдо рдХрд░рдирд╛ рдФрд░, рдХреНрдпрд╛ рдирд░рдХ рдордЬрд╝рд╛рдХ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдПрдХ рдорд┐рдиреА рд░реВрдкрд░реЗрдЦрд╛ - рдРрд╕реА рдЪреАрдЬреЗрдВред рдореБрдЭреЗ рд╢реБрднрдХрд╛рдордирд╛рдПрдБ! :)