рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдореЛрдиреЛрд▓рд┐рдерд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо

рдореБрдЭреЗ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╕рдВрдж рд╣реИрдВред рдЖрдЬ рдпрд╣ рдорд╛рдирдирд╛ тАЛтАЛрд╡рд┐рджреЗрд╢реА рдмреБрджреНрдзрд┐рдорддреНрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╢рд░реНрдордирд╛рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реИред рдирд╣реАрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рддрдХрдиреАрдХ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдореИрдВ рди рдХреЗрд╡рд▓ рд╕рдореНрдорд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдореИрдВ рдЙрди рд╕рдордпреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рддрдм рдЗрд╕реЗ рджреВрд╕рд░реЗ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддрдм рд╣рд░ рдЬрдЧрд╣ (рд▓рдЧрднрдЧ) рдПрдХ рд╣реА рд╕рд┐рд╕реНрдЯрдо рдерд╛ - рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛрдЬ, рдЖрд╡реЗрджрди рд╕реНрддрд░ рдкрд░ рд╕рдВрдЧрддрддрд╛ рдХреА рд▓рдЧрднрдЧ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рдХреЛрдИ рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рд╕реНрд░реЛрдд рдирд╣реАрдВ рдерд╛ - рд╣рд░ рдХреЛрдИ WinAPI рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддрд╛ рдерд╛ рдЬреЛ рдЕрдХреЗрд▓реЗ рднреА рднреАрддрд░ рд╕рдВрдШрд░реНрд╖ рдкреИрджрд╛ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╡рд┐рдбрдВрдмрдирд╛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЧрдВрднреАрд░рддрд╛ рд╕реЗ - рдХрднреА-рдХрднреА рдЕрдм рднреА рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рдпрд╣ рд╕рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░реЗред рдХреНрдпрд╛ рдпрд╣ рдХрдард┐рди рд╣реИ? рдпрджрд┐ рдЖрдк рд╕реЛрдЪрддреЗ рд╣реИрдВ рдФрд░ рдЦреБрджрд╛рдИ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВред

рдореБрдЭреЗ рд╕рд╛рдл-рд╕реБрдерд░реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рдордЬрдмреВрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╡рд╛рд▓реА рдЙрдЪреНрдЪрд╕реНрддрд░реАрдп рднрд╛рд╖рд╛рдПрдВ рднреА рдкрд╕рдВрдж рд╣реИрдВред рдореЗрд░реЗ рдкрд╕рдВрджреАрджрд╛ рдЬрд╛рд╡рд╛ рдФрд░ C # рд╣реИрдВред рджреЛрдиреЛрдВ рд╕реА + + рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХрдИ рдлрд╛рдпрджреЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рдХрдИ рдЪрд┐рдВрддрд╛рдУрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рджрд┐рд▓рд╛рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдХреНрдпрд╛ рджреЗрдирд╛ рд╣реИ? рдУрд░реЗрдХрд▓ JVM, .NET рдпрд╛ рдореЛрдиреЛ рдирд╛рдордХ рдПрдХ рднрд╛рд░реА рдбреЗрдХ рд▓реЗ рдЬрд╛рдиреЗ рд╕реЗред рд╕рднреА рддреАрди рдбреЗрдХ рд╕реИрдХрдбрд╝реЛрдВ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХрд╛ рд╡рдЬрди рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдРрд╕рд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рднреНрд░рдорд┐рдд рдХрд┐рдП рдмрд┐рдирд╛, рдЗрд╕ рдЪреАрдЬрд╝ рдХреЛ рд╕реНрд╡рдпрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдПрдХ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЬреЗрд╡реАрдПрдо рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдФрд░ рдЕрдм - рд╣рдо рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд┐рд░реНрдл рдПрдХ рджреЛрд╕реНрдд (рдпрд╛ рдПрдХ рд▓рд╛рдЦ рджреЛрд╕реНрддреЛрдВ) рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдлреЗрдВрдХрдирд╛ рдФрд░ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдХрд┐ рдпрд╣ рдЙрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗрдЯрдЕрдк рдХрд░рдирд╛ рд╣реИ, рдмреИрд╕рд╛рдЦреА рдЪрд▓рд╛рдирд╛ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдЕрднреА рддрдХ .NET рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ - рдПрдХ рдмрд╛рд░ рдореИрдВрдиреЗ рдПрдХ рджреЛрд╕реНрдд рдХреЛ 3 рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдПрдХ рдмрд╛рд░ рджреЗрдЦрд╛ рдерд╛, рдФрд░ рддреАрдиреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА ...

рдЗрд╕реЗ рд░реЛрдХреЛ! рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдорд╢реАрди рдкрд░ рдХрд┐рд╕реА рднреА рдЬреЗрд╡реАрдПрдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдУрдПрд╕ рдПрдХреНрд╕ рдХреЗ рддрд╣рдд рдПрдХ рд╕реНрдкрд░реНрд╢ рдХреЗ рд╕рд╛рде рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрд╕ рдереЛрдбрд╝рд╛ рд╕рд╛ рд▓реЗрддрд╛ рд╣реИ; рддрд╛рдХрд┐ рдХреЛрдИ рдпрд╣ рднреА рди рд╕рдордЭреЗ рдХрд┐ рдпрд╣ рд▓рд┐рдЦрд╛ рд╣реБрдЖ рд╣реИ, рдХрд╣рддреЗ рд╣реИрдВ, рд╕реАред рдЗрдореНрдкреЙрд╕рд┐рдмрд▓ рдореЗрдВ рдирд╣реАрдВ ? рдПрдХрджрдо рд╡рд┐рдкрд░реАрдд! (рдФрд░ рдирд╣реАрдВ, рдореЗрд░рд╛ рдорддрд▓рдм gcj рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рд╕рднреА рдЖрдХрд░реНрд╖рдг рдХреЗ рдЬрд╛рд╡рд╛ рдХреЛ рд▓реВрдЯрддрд╛ рд╣реИред рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддреГрддреАрдп-рдкрдХреНрд╖ рдЬрд╛рд░ рднреА рдЖрдк рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред


рдмреЗрд╢рдХ, рдореИрдВ рдПрдХ рдЬрд╛рджреВрдЧрд░ рдирд╣реАрдВ рд╣реВрдВред рдореБрдЭреЗ рд╕рд┐рд░реНрдл рдПрдХ рдЬрд╛рджреБрдИ рдХрд▓рд╛рдХреГрддрд┐ рдорд┐рд▓реАред рдЗрд╕реЗ Avian рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ oss.readytalk.com/avian рдкрд░ рд╕реНрдерд┐рдд рд╣реИ , рдФрд░ рдпрд╣ рдПрдХ рд╣рд▓реНрдХрд╛, рд▓реЗрдХрд┐рди рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ JVM рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬрд┐рд╕реЗ рдУрд░реЗрдХрд▓ рдиреЗ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, "рд▓рд╛рдЗрд╕реЗрдВрд╕ рд▓реЗрдВ рдФрд░ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ" рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдФрд░ - рдирд╣реАрдВ, рдореЗрд░рд╛ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдореЗрд░рд╛ рдХреЛрдИ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рднреА рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рдЕрднреА рд╕реАрдЦрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рдФрд░ рд╕рдореНрдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЬреНрдЮрд╛рди рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рд╣реИред рд╣рдмреНрд░ рдХреЗ рдирд┐рд╡рд╛рд╕реАред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЬреЗрдЖрдИрдЯреА рдХрдВрдкрд╛рдЗрд▓рд░ рд╣реИ, рдпрд╛рдиреА рдЗрд╕рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдорд╛рдкрд╛ рд╣реИ)ред

рдПрд╡рд┐рдпрди рдХреЛ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕рдХреЗ рдмрд╣реБрдд рдиреАрдЪреЗ рдЫреАрди рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╡рд░реНрдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд╛рдирдХ, рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗрд╡рд▓ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХреЗ рд╕рд╛рде "рднрд╛рд░реА" рдорд┐рд▓реЗрдЧрд╛ред рдЖрдЗрдП рдРрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦреЗрдВред

0. рдмреБрдзрд╡рд╛рд░


рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдпреВрдирд┐рдХреНрд╕-рдбреЗрд╡рд▓рдкрд░ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЬреА ++ рд╕рдВрдХрд▓рдХред рд╡рд┐рдВрдбреЛрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рд╣реИред рдореИрдВ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд MinGW32 рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдЕрджреНрднреБрдд MSYS рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдпреВрдирд┐рдХреНрд╕ рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рдерд╛ред MinGW32 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рдВрдХрд▓рдХ 32-рдмрд┐рдЯ рд╣реИрдВ, рдЬреЛ рдХрд┐рд╕реА рддрд░рд╣ рдкрд░рд┐рдгрд╛рдореА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдорд┐рдВрдЧрд╡-рдбрдмреНрд▓реНрдпреВ 64 рдерд╛, рдЬреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕рдореЗрдВ рди рдХреЗрд╡рд▓ рдПрдордПрд╕рд╡рд╛рдИрдПрд╕ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЧрд┐рдЯ рднреА рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЫрд┐рдкрд╛ рджрд┐рдпрд╛ред

рд╡рд┐рдВрдбреЛрдЬ
MinGW рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, sourceforge.net/projects/mingwbuilds рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ рджреЛ рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ: x64- XXX -release-posix-seh-rev X .7z рдФрд░ рдмрд╛рд╣рд░реА-рдмрд╛рдЗрдирд░реА-рдкреИрдХреЗрдЬ / msys / 7za + wget + svn + git +ред рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ + рдХреЗрд╡реАрдПрд╕-рд░реЗрд╡ X .7z

рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрди рджреЛрдиреЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЕрдирдкреИрдХ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ MSYS рдХреЛ рдпрд╣ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ MinGW рдХрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, msys/etc рдФрд░ fstab рдлрд╝рд╛рдЗрд▓ рдореЗрдВ /mingw рдХрд╛ рдкрде рд▓рд┐рдЦреЗрдВ рдЬреИрд╕рд╛ рдХрд┐ fstab.sample рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ fstab.sample рдпрд╣ рдЗрд╕ рддрд░рд╣ рдирд┐рдХрд▓рд╛:
 c:/mingw64 /mingw 


рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк MSYS рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, msys\msys.bat (рдЗрд╕рдХреЗ рдмрдЧрд▓ рдореЗрдВ рджреЛ рдЖрдЗрдХрди рд╣реИрдВ)ред рд╣рдо рдЗрд╕ рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рд╕рднреА рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдпреВрдирд┐рдХреНрд╕ рдХрдорд╛рдВрдб рдФрд░ рдпреВрдирд┐рдХреНрд╕ рдкрде рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЗрд╕рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдУрдПрд╕ рдПрдХреНрд╕
OS X рдХреЗ рддрд╣рдд рдЖрдкрдХреЛ Xcode 4 рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рдбрд╛рдЙрдирд▓реЛрдб рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред рдлрд┐рд░ рдЖрдк рдмрд╕ рд▓реЙрдиреНрдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓реЗрдВред

рд▓рд┐рдирдХреНрд╕
рд▓рд┐рдирдХреНрд╕ рдореЗрдВ, рдбреЗрдмрд┐рдпрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд, рдмрд╕ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ:

 > sudo apt-get install build-essential 

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


рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдиреАрдЪреЗ рдХреА рд░реЗрдЦрд╛ рд╡рд╣ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЖрдк рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ

 > g++ 

рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрддреЗ рд╣реИрдВ

 g++: fatal error: no input files 

рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрджреЗрд╢ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рд▓рдбрд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИред

1. рдПрд╡рд┐рдпрди


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реБрдЭрд╛рд╡ рджреЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░рд╛ g ++ рдПрд╡рд┐рдпрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗред
рдУрдкрди: oss.readytalk.com/avian рд╕реНрдЯреЗрдЯрд╕ рд▓рд┐рдВрдХ рдХреЛ рдЪреБрдиреЗред рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реЗ рдкреГрд╖реНрда рдкрд░, рдПрд╡рд┐рдпрди 0.6 рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдорд╛рдореВрд▓реА рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рд╣реИ (рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЗрд╕реЗ рдЧрд┐рд░рд╛рдиреЗ рдореЗрдВ рдХрднреА рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рд╣реБрдЖ, рдФрд░ рдЙрдирдХреЗ рдмрдЧрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдХреАрдбрд╝реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдЙрдЪреНрдЪ рд╕реНрдерд┐рд░рддрд╛)ред

рдПрд╡рд┐рдпрди рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдирдкреИрдХ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ (рдЗрд╕реЗ ~ / рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рд╣реЛрдиреЗ рджреЗрдВ)ред

 > cd ~/Projects 

рд╡рд┐рдВрдбреЛрдЬ рдкрд░, MSYS рдореЗрдВ ~ рдлрд╝реЛрд▓реНрдбрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╣реЛрдо рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди C: \ MinGW64 \ msys \ home \ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪреВрдВрдХрд┐ рд╣рдо рдЦреБрдж рдХреЛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕реЗ рдЬрд┐рддрдирд╛ рджреВрд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рдлрд╛рдпрджрд╛ рднреА рд╣реИред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдПрд╡рд┐рдпрди-0.6.tar.bz2 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ ~ / рдбрд╛рдЙрдирд▓реЛрдб рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рддреЛ рдЗрд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдХреЗ рд╡рд░реНрддрдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЕрдирдкреИрдХ рдХрд░реЗрдВ

 > tar -xjf ~/Downloads/avian-0.6.tar.bz2 

рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рдкрде рдХреЛ рдкреНрд░рдкрддреНрд░ / c/User/username/Downloads/avian-0.6.tar.bz2 рдореЗрдВ рдлрд╝реЙрд░рд╡рд░реНрдб рд╕реНрд▓реИрд╢ рдХреЗ рд╕рд╛рде mingw рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреЗрд╢рдХ, рдЖрдк рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реМ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдЕрдирдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдПрд╡рд┐рдпрди рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдЗрд╕рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЖрдЗрдП рдЗрд╕рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ:

 > cd avian 

рдЕрдм рдЖрдк рдореЗрдХ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЕрднреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдорд┐рд▓реЗрдЧрд╛ рдХрд┐ zlib рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред Zlib.h рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝: рдРрд╕реА рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╣реАрдВред

рд╡рд┐рдВрдбреЛрдЬ
рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд, рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛ рдкрд╕реАрдирд╛ рдмрд╣рд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдПрд╡рд┐рдпрди рдХреЗ рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдИ рдЧрдИ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рддреН рдЙрдирдХреЗ рд╡рд┐рд╢реЗрд╖ win64 рд╕рд╣рд╛рдпрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ zlib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрд▓рд┐рдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдЧрд┐рдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЧрд┐рдЯ рд╣рдо рд╕реНрдерд╛рдкрд┐рдд msys рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдЕрд╕реЗрдВрдмрд▓реА рдХреБрдЯрд┐рд▓ рд╣реИ - рдЗрд╕рдореЗрдВ msys-crypto-0.9.8.dll рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ Google рдкрд░ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЕрдкрдиреЗ usb рднрд╛рдИ рдХреЗ рдмрдЧрд▓ рдореЗрдВ msys-crypto-1.0.0.dll рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдпрд╣ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреВрд░реНрдг рд╣реИред

рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдПрд╡рд┐рдпрди рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

 > git clone git://oss.readytalk.com/win64.git ../win64 

рдЬреЛ win64 рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдПрд╡рд┐рдпрди рдлреЛрд▓реНрдбрд░ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд░рдЦ рджреЗрдЧрд╛, рдЬреЛ рдХрд┐ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрд╡рд┐рдПрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ zlib рдХреЗ рд╕рд╛рдеред

рдУрдПрд╕ рдПрдХреНрд╕
рдУрдПрд╕ рдПрдХреНрд╕ рдХреЗ рддрд╣рдд, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ (рд╕рдВрднрд╡рддрдГ рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ)ред

рд▓рд┐рдирдХреНрд╕
рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрд╕ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

 > sudo apt-get install zlib1g-dev 


рд╣рд╛рд▓рд╛рдБрдХрд┐, zlib рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЯрд╛рдЗрдк make рд╕реЗ, рд╣рдореЗрдВ рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ - рдПрд╡рд┐рдпрди рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ / bin / javac рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрддреЗ рд╣реИрдВ - рдпрд╣ рдПрдХ рдЬрд╛рд╡рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рд╣реИред рдЪреВрдВрдХрд┐ рдПрд╡рд┐рдпрди рдХреЗрд╡рд▓ рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рд╣реИ, рд╣рдо рдЕрднреА рднреА рдУрд░реЗрдХрд▓ рд╕реЗ - рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╡реАрдПрдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рд╕реНрд░реЛрдд рдЬрд╛рд╡рд╛ рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдЫреЛрдЯреЗ рдПрд╡рд┐рдпрди рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЬреИрд╕реЗ System , ArrayList рдпрд╛ HashMap рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЬреЗрдбреАрдХреЗ рдХреЛ рдЕрднреА рднреА рдбреЗрд╡рд▓рдкрд░ рдХреА рдорд╢реАрди рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рджреЛрдиреЛрдВ рдЬрдм рдПрд╡рд┐рдпрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдФрд░ JDK7 рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдПрд╡рд┐рдпрди 0.6 рд╕рдВрдЧрдд рд╣реИред JRE рдХреА рддрд░рд╣ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред

рд╡рд┐рдВрдбреЛрдЬ
рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ, рдУрд░реЗрдХрд▓ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред

рдУрдПрд╕ рдПрдХреНрд╕
рдУрдПрд╕ рдПрдХреНрд╕ рдореЗрдВ, рд╡рд┐рдВрдбреЛрдЬ рдХреА рддрд░рд╣, рд╣рдо рдУрд░реЗрдХрд▓ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд▓рд┐рдирдХреНрд╕
рд▓рд┐рдирдХреНрд╕ рдореЗрдВ, рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдордВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ

 > sudo apt-get install openjdk-7-jdk 

(рд╢рд╛рдпрдж рдЖрдкрдХреЗ рд╡рд┐рддрд░рдг рдореЗрдВ OpenJDK рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрд╛ рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рдХрд┐рд╕реА рдФрд░ рддрд░рд╣ рд╕реЗ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рд▓рд┐рдирдХреНрд╕ рд▓рд┐рдирдХреНрд╕ рд╣реИ - рдЗрд╕реЗ рдЦреЛрдЬреЗрдВ рдФрд░ рдЦреЛрдЬреЗрдВред)

рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдЬрд╛рд╡рд╛ рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╣рд╛рдВ рд░рдЦрд╛ рд╣реИ, рдкрдврд╝рд┐рдП JAVA_HOME рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░, рдЬрд┐рд╕реЗ рдЕрдм рд╣рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдж рдореЗрдВ рдЙрд╕реА рдорд╛рди рдХреЗ рд╕рд╛рде рдЗрд╕реА рдЪрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╡рд┐рдВрдбреЛрдЬ
рд╡рд┐рдВрдбреЛрдЬ рдкрд░ MinGW рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ / c / Program \ Files / Java / jdk1.7.0_07 / рд╣реЛрдЧрд╛ (рдЖрдкрдиреЗ рдЗрд╕реЗ JDK7 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛)ред

рдУрдПрд╕ рдПрдХреНрд╕
OS X рдХреЗ рдЕрдВрддрд░реНрдЧрдд, рдЖрдкрдХрд╛ JDK7 /Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдЧрд╛

рд▓рд┐рдирдХреНрд╕
рд▓рд┐рдирдХреНрд╕ рдкрд░, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 > update-java-alternatives -l java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64 > export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64 


рдФрд░ рдЕрдВрдд рдореЗрдВ, рдмреЗрд╣рддрд░реАрди рдШрдВрдЯрд╛ - рд╣рдо рдПрд╡рд┐рдпрди рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ:

 > make 

рдпрджрд┐ рдЖрдкрдиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдмрд┐рд▓реНрдб / <рдЖрдкрдХреЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рдирд╛рдо> / <рдХреБрдЫ рдлрд╝рд╛рдЗрд▓> рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдлрд╝реЙрд░реНрдо рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЕрдиреБрдХреНрд░рдо рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдФрд░ рдлрд┐рд░ рдмрд┐рд▓реНрдб / <рдЖрдкрдХреЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рдирд╛рдо> / <рдХреБрдЫ рдлрд╝рд╛рдЗрд▓> рд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдмрд┐рд▓реНрдб / <рдЖрдкрдХреЗ platform_name> рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреА, рд▓реЗрдХрд┐рди рд╣рдо рдХреЗрд╡рд▓ рдпрд╣рд╛рдВ рд░реБрдЪрд┐ рд░рдЦреЗрдВрдЧреЗ:



2. рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕реНрд╡рддрдВрддреНрд░ рдЕрдЦрдВрдб рд╣реЗрд▓реНрд▓реЛ


рд╣рдордиреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдПред рдЕрдм рд╣рдо рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред

рдХрд╛рд░реНрдп рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдВрднрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рдХрдо рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдирд┐рд░реНрднрд░ рдмреБрдХрдорд╛рд░реНрдХ рд╣реЛрдВрдЧреЗ рдФрд░ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рдПрдХрд▓ exe рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА "рдХреНрд▓реАрди" рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ред

2.1ред рдЬреЗрдПрдирдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛

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

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

 package packagename; { class ClassName { void native foo(); } } 

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬрд╛рд╡рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдорд┐рдд (рдЧреИрд░-рдЖрднрд╛рд╕реА) рдХреЛрдб рдХреЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП

 extern "C" JNIEXPORT void JNICALL Java_packagename_ClassName_foo(JNIEnv * env, jobject caller) { тАж } 

рдЬрдм рд╣рдо рдЬрд╛рд╡рд╛ рдХреЛрдб рдореЗрдВ foo() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореВрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ JNIEnv рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ - рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдЖрдкрдХреЛ рд╡реАрдПрдо рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ рдФрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде "рд╕рдВрд╡рд╛рдж" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдЬрд┐рд╕рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - jobject caller (рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдерд┐рд░ рдерд╛, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдХреНрд▓рд╛рд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ jclass caller_class )ред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЬрд╛рд╡рд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреЗрдПрдирдЖрдИ рдХрд╛ рдЕрдзреНрдпрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдмрд╛рддрдЪреАрдд рдХреЗ рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЬреЗрдПрдирдЖрдИ рдПрдХ рдмрд╛рд╣рд░реА рджреЗрд╢реА рдХреЛрдб рдХреЛ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдУрд░реЗрдХрд▓ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЦрдВрдб рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ ред

2.2ред рдЬреЗрдПрдирдЖрдИ рдиреЗ рдбрд╛рдпрд▓ рдХрд┐рдпрд╛

рдпрд╣ рд╕рдм рд╢реИрдХреНрд╖рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреНрдпреЛрдВ рдерд╛? рдлрд┐рд░, рдЗрд╕ рд╕рдордп рд╣рдо рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк, рд▓рдЧрднрдЧ рдЙрд▓рдЯрд╛, рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдореЗрдВ рдПрдХ рдореВрд▓-рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ libavian.a рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ JVM рд╕реАрдзреЗ рд╣реА рдЕрдВрджрд░ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдореЗрдВ "рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ" - рдлреЙрд░реНрдо рдХреА рдПрдХ рдХреНрд▓рд╛рд╕ рд╕рд╣рд┐рдд, рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рд╡рд╛ рдХрдХреНрд╖рд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреА

 class Application { public static void main(String... args) { тАж } } 

рдпрд╣ рд╕рдм рдмрд╣реБрдд рдбрд░рд╛рд╡рдирд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░реНрдп рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдЖрдкрдХреЛ рдХрд╛рдлреА рд╕рд░рд▓ рд╕реА рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдПрд╡рд┐рдпрди рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рд╣рдорд╛рд░реА Application рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рде рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ) рдХреЛ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЬреЗрд╡реАрдПрдо рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЗрд╡реАрдПрдо рдХреЛ рдЦрд┐рд▓рд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдЗрд╕ рд╕реА-рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдкрдиреА рдЬрдЧрд╣ рдкрд░ рд╣реЛ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВред

2.3ред рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп

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

рдЬрд╣рд╛рдБ рднреА рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдПрдХ рдХреНрд░реЙрд╕рдмреЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИ, рдПрд╡рд┐рдпрди рдФрд░ рд╡рд┐рди 32 рдХреЗ рдмрдЧрд▓ рдореЗрдВ)

 > mkdir crossbase && cd crossbase 

рдЕрдВрджрд░, libs рдХрд╛ рдПрдХ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ

 > mkdir lib && cd lib 

рдЕрдВрджрд░, рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рдУрдПрд╕ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВред рдпрд╣ linux, win32 рдпрд╛ osx рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

 > mkdir win-x86_64 && cd win-x86_64 

рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЖрдкрдХреЛ libavian.a рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 > cp ../../../avian/build/windows-i386/libavian.a ./ 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЬрд╣рд╛рдВ zlib рдирд╣реАрдВ рд╣реИ, libz.a рдХреЛ рднреА рдЙрд╕реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 > cp ../../../win-x86_64/lib/libz.a ./ 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдЙрди рдиреНрдпреВрдирддрдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдореЗрдВ classpath.jar рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕реЗ рдПрд╡рд┐рдпрди рдХреЗ рд╕рд╛рде рднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

 > cd .. > mkdir java && cd java > cp ../../../avian/build/windows-i386/classpath.jar ./ 

рдФрд░ рдЕрдм рдпрд╣ рд░рд╣рд╕реНрдпрдордп рдмрд╛рдЗрдирд░реАрдЯреЙрдмрдЬреЗрдХреНрдЯ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рд╣рдореЗрдВ рдЕрдкрдиреА рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рд▓рд┐рдВрдХрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рджреМрд░рд╛рди рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╣рдорд╛рд░реА рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

 > cd ../.. 

(рд╣рдо рдЙрд╕ рдХреНрд░реЙрд╕рдмреЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВ рдЬрд╣рд╛рдБ рд╣рдордиреЗ рд▓рд┐рдм рдмрдирд╛рдпрд╛ рд╣реИ)

 > mkdir -p tools/win-x86_64 && cd tools/win-x86_64 

Win-x86_64 рдирд╛рдо рдЖрдВрддрд░рд┐рдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдХреА рддрд░рд╣ рд╣реА рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдмрд╛рдЗрдирд░реАрдЯреЙрдмрдЬреЗрдХреНрдЯ рдлреЗрдВрдХреЛред (рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕рдХрд╛ рдПрдХреНрд╕рд╛рдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ)

 > cp ../../../avian/build/windows-i386/binaryToObject/binaryToObject.exe ./ 

рдЖрдк рдЗрд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 usage: c:\Users\imizus\Projects\crossbase\crossbase\tools\win32\binaryToObject.exe <input file> <output file> <start name> <end name> <platform> <architecture> [<alignment> [{writable|executable}...]] 


2.4ред рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб

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

 > mkdir -p src/cpp && cd src/cpp 

рдЕрдВрджрд░, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде main.cpp рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ (рдореИрдВ рдЗрд╕реЗ рдЗрд╕рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдореЗрдВ рджреВрдВрдЧрд╛, рдФрд░ рдлрд┐рд░ рдореИрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реИ)ред

 #include <stdint.h> #include <string.h> #ifdef __MINGW32__ #include <windows.h> #endif #include <jni.h> #if (defined __MINGW32__) # define EXPORT __declspec(dllexport) #else # define EXPORT __attribute__ ((visibility("default"))) \ __attribute__ ((used)) #endif #if (! defined __x86_64__) && (defined __MINGW32__) # define SYMBOL(x) binary_boot_jar_##x #else # define SYMBOL(x) _binary_boot_jar_##x #endif extern "C" { extern const uint8_t SYMBOL(start)[]; extern const uint8_t SYMBOL(end)[]; EXPORT const uint8_t* bootJar(unsigned* size) { *size = SYMBOL(end) - SYMBOL(start); return SYMBOL(start); } } // extern "C" int main(int argc, const char** argv) { #ifdef __MINGW32__ // For Windows: Getting command line as a wide string int wac = 0; wchar_t** wav; wav = CommandLineToArgvW(GetCommandLineW(), &wac); #else // For other OS: Getting command line as a plain string (encoded in UTF8) int wac = argc; const char** wav = argv; #endif JavaVMInitArgs vmArgs; vmArgs.version = JNI_VERSION_1_2; vmArgs.nOptions = 1; vmArgs.ignoreUnrecognized = JNI_TRUE; JavaVMOption options[vmArgs.nOptions]; vmArgs.options = options; options[0].optionString = const_cast<char*>("-Xbootclasspath:[bootJar]"); JavaVM* vm; void* env; JNI_CreateJavaVM(&vm, &env, &vmArgs); JNIEnv* e = static_cast<JNIEnv*>(env); jclass c = e->FindClass("crossbase/Application"); if (not e->ExceptionCheck()) { jmethodID m = e->GetStaticMethodID(c, "main", "([Ljava/lang/String;)V"); if (not e->ExceptionCheck()) { jclass stringClass = e->FindClass("java/lang/String"); if (not e->ExceptionCheck()) { jobjectArray a = e->NewObjectArray(wac - 1, stringClass, 0); if (not e->ExceptionCheck()) { for (int i = 1; i < wac; ++i) { #ifdef __MINGW32__ // For Windows: Sending wide string to Java int arglen = wcslen(wav[i]); jstring arg = e->NewString((jchar*) (wav[i]), arglen); #else // For other OS: Sending UTF8-encoded string to Java int arglen = strlen(wav[i]); jstring arg = e->NewStringUTF((char*) (wav[i])); #endif e->SetObjectArrayElement(a, i - 1, arg); } e->CallStaticVoidMethod(c, m, a); } } } } int exitCode = 0; if (e->ExceptionCheck()) { exitCode = -1; e->ExceptionDescribe(); } vm->DestroyJavaVM(); return exitCode; } 


__MINGW32__ рдПрдХ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдкреНрд░рддреАрдХ рд╣реИ (рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ!) рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ MinGW32 рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдЕрдВрджрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдиреЛрдЯрд┐рд╕ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рд╣реИрдВ, рдЕрдиреНрдп рд╕рднреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рд╕реНрдЯрдо рдПрдкреАрдЖрдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕реЗ рд╣рдо рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ #include <windows.h> ред рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░, рд╣рдо рдорд╛рдирдХ POSIX рдФрд░ ANSI C ++ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдХреЛрдб рдХреЛ рдХреНрд░рдо рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред

 #if (defined __MINGW32__) # define EXPORT __declspec(dllexport) #else # define EXPORT __attribute__ ((visibility("default"))) \ __attribute__ ((used)) #endif 

рдпрд╣ рдХреЛрдб рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ gcc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦреА рдереАред рдЗрд╕рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред "рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдПрдХрддреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?" рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВред рдЬрд╡рд╛рдм рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдПрд╡реАрдПрди рдЬреЗрдПрдирдЖрдИ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдордВрдЪ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЖрдкрдХреЗ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рди рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ, рдмрд▓реНрдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рднреА рд╣реИред

рдЕрдЧрд▓рд╛ рднрд╛рдЧ рдЕрдЬреАрдм рдЬрд╛рджреВ рд╣реИ:
 #if (! defined __x86_64__) && (defined __MINGW32__) # define SYMBOL(x) binary_boot_jar_##x #else # define SYMBOL(x) _binary_boot_jar_##x #endif extern "C" { extern const uint8_t SYMBOL(start)[]; extern const uint8_t SYMBOL(end)[]; EXPORT const uint8_t* bootJar(unsigned* size) { *size = SYMBOL(end) - SYMBOL(start); return SYMBOL(start); } } // extern "C" 

рдЪрд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд░реНрдпрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ (рдЪрд▓реЛ extern "C" рдФрд░ EXPORT рдирд┐рд░реНрджреЗрд╢ рджреЗрдЦреЗрдВ рдЬреЛ рд╣рдордиреЗ рдЕрднреА рджрд░реНрдЬ рдХрд┐рдпрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо bootJar ред рдЗрд╕ рдирд╛рдо рдХреЛ bootJar рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдорд╛рдирд╕рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ _binary_boot_jar_start рдФрд░ _binary_boot_jar_end (MinGW32 рдореЗрдВ рдЙрдирдХреЗ рдкрд╛рд╕ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛) рдХреЗ рдмреАрдЪред рдпреЗ рд╡рд░реНрдг рдЦреБрдж рдХреЛ рдмрд╛рд╣рд░реА рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд▓рд┐рдВрдХрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдПрдХ рд░рд╣рд╕реНрдпрдордп рдЧрддрд┐рд╡рд┐рдзрд┐ рд╣реИ, рд╣реИ рдирд╛?

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдиреАрдЪреЗ рджреЗрдЦреЗрдВрдЧреЗ, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдПрд╡рд┐рдпрди рдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдПрдХ рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╡рд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░рджрд╛рди рдХреАред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рдВ, рд╣рд╛рдВ, рдореИрдВ рднреА рдкрд╣рд▓реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрдВрджрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИред рд╣рдорд╛рд░реЗ рдЬрд╛рд░ рдпреБрдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЬрдм рд╣рдо рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ 2 рд╡рд░реНрдгреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЗрд╕ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд ( _binary_boot_jar_start ) рдФрд░ рдЕрдВрдд ( _binary_boot_jar_end ) рдХреЛ _binary_boot_jar_end ред рдФрд░ bootJar рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрд╡рд┐рдпрди рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрд┐рддрдиреЗ рд╕рдордп рддрдХ рд╣реИред рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдБ рдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

 options[0].optionString = const_cast<char*>("-Xbootclasspath:[bootJar]"); 

рдЕрдВрдд рдореЗрдВ, рд╣рдо рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдП - main рдХрд╛рд░реНрдпред рдЙрд╕рдХреЗ рдХрд╛рд░реНрдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


рдЪрд▓реЛ рд╕рдорд╛рд░реЛрд╣ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ:

 #ifdef __MINGW32__ // For Windows: Getting command line as a wide string int wac = 0; wchar_t** wav; wav = CommandLineToArgvW(GetCommandLineW(), &wac); #else // For other OS: Getting command line as a plain string (encoded in UTF8) int wac = argc; const char** wav = argv; #endif 

рдпрд╣рд╛рдВ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╡рд┐рдВрдбреЛрдЬ рдиреЗ рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ред рдЬрдм рд╣рд░ рдЬрдЧрд╣ рдкреБрд░рд╛рдиреЗ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рд┐рдВрдЧрд▓-рдмрд╛рдЗрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓реЛрдЧреЛрдВ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рд╕рднреА OS рдиреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ UTF-8 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛, рдФрд░ Microsoft рдХрд╛ рдкрд╕рдВрджреАрджрд╛ рдмреНрд░реЗрдирдЪрд╛рдЗрд▓реНрдб рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджреЛ-рдмрд╛рдЗрдЯ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдмрд╛рдд рдХреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХреА рдХрд┐ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдореЗрдВред рд▓реЗрдХрд┐рди рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рд╣рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреЛ рдПрдХ рдбрдмрд▓-рдмрд╛рдЗрдЯ char рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдкреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ (рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ windows.h рдШрд╕реАрдЯрд╛ рд╣реИ), рдЬреЛ рд╣рдореЗрдВ рд╕рд╣реА рджреЛ-рдмрд╛рдЗрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд╛рдо рдореЗрдВ рд╕рд┐рд░рд┐рд▓рд┐рдХ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓реЗрдВ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдиреНрдп рд╕рднреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░, рд╣рдо рдХреЗрд╡рд▓ рддрд░реНрдХреЛрдВ рд╕реЗ рд▓реЗрдХрд░ main рдлрд╝рдВрдХреНрд╢рди рддрдХ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВред

рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

 JavaVMInitArgs vmArgs; vmArgs.version = JNI_VERSION_1_2; vmArgs.nOptions = 1; vmArgs.ignoreUnrecognized = JNI_TRUE; JavaVMOption options[vmArgs.nOptions]; vmArgs.options = options; options[0].optionString = const_cast<char*>("-Xbootclasspath:[bootJar]"); JavaVM* vm; void* env; JNI_CreateJavaVM(&vm, &env, &vmArgs); JNIEnv* e = static_cast<JNIEnv*>(env); 

рд╣рдо JNIEnv рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рднреА рдмрд╛рд╣рд░ JNIEnv , рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдирдП рдмрдирд╛рдП рдЧрдП рдЬрд╛рд╡рд╛ рдорд╢реАрди рдХреЛ рдХрдорд╛рдВрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред

рдЖрдЧреЗ рдХреЛрдб рдорд╛рдпрд╛рдХреЛрд╡реНрд╕реНрдХреА рдХреА рдХрд╡рд┐рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреЗрд╡рд▓ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЬреЗрдПрдирдЖрдИ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдПред

 jclass c = e->FindClass("crossbase/Application"); if (not e->ExceptionCheck()) { jmethodID m = e->GetStaticMethodID(c, "main", "([Ljava/lang/String;)V"); if (not e->ExceptionCheck()) { jclass stringClass = e->FindClass("java/lang/String"); if (not e->ExceptionCheck()) { jobjectArray a = e->NewObjectArray(wac - 1, stringClass, 0); if (not e->ExceptionCheck()) { for (int i = 1; i < wac; ++i) { #ifdef __MINGW32__ // For Windows: Sending wide string to Java int arglen = wcslen(wav[i]); jstring arg = e->NewString((jchar*) (wav[i]), arglen); #else // For other OS: Sending UTF8-encoded string to Java int arglen = strlen(wav[i]); jstring arg = e->NewStringUTF((char*) (wav[i])); #endif e->SetObjectArrayElement(a, i - 1, arg); } e->CallStaticVoidMethod(c, m, a); } } } } int exitCode = 0; if (e->ExceptionCheck()) { exitCode = -1; e->ExceptionDescribe(); } 

crossbase/Application рдХреНрд▓рд╛рд╕ рд▓реЗрдВред рдпрджрд┐ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде main рд╡рд┐рдзрд┐ ([Ljava/lang/String;)V рдпрджрд┐ рд╣рдо, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ java/lang/String рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ (рд╡реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдВрдЧреЗ)ред , java- , UTF-8 , Windows , .

- , .

, , ┬л ┬╗. Java. , , crossbase.Application public static void main(String... args) .

crossbase/src java, тАФ crossbase ( тАФ ), Application.java :

 package crossbase; public class Application { public static void main(String... args) { System.out.println("This is a crossplatform monolith application with Java code inside. Freedom to Java apps!"); for (int i = 0; i < args.length; i++) { System.out.println("args[" + i + "] = " + args[i]); } } } 

Java, , , . , Avian ( , , OpenJDK).

2.5ред рд╕рднрд╛


. make, , gcc. , . рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВред , make . Makefile crossbase :

 UNAME := $(shell uname) ARCH := $(shell uname -m) SRC = src BIN = bin OBJ = obj JAVA_SOURCE_PATH = $(SRC)/java JAVA_CLASSPATH = $(BIN)/java CPP_SOURCE_PATH = $(SRC)/cpp OBJECTS = $(OBJ) DEBUG_OPTIMIZE = -O3 #-O0 -g ifeq ($(UNAME), Darwin) # OS X PLATFORM_ARCH = darwin x86_64 PLATFORM_LIBS = osx-x86_64 PLATFORM_GENERAL_INCLUDES = -I"$(JAVA_HOME)/include" -I"$(JAVA_HOME)/include/darwin" PLATFORM_GENERAL_LINKER_OPTIONS = -framework Carbon PLATFORM_CONSOLE_OPTION = EXE_EXT= STRIP_OPTIONS=-S -x RDYNAMIC=-rdynamic else ifeq ($(UNAME) $(ARCH), Linux x86_64) # linux on PC PLATFORM_ARCH = linux x86_64 PLATFORM_LIBS = linux-x86_64 PLATFORM_GENERAL_INCLUDES = -I"$(JAVA_HOME)/include" -I"$(JAVA_HOME)/include/linux" PLATFORM_GENERAL_LINKER_OPTIONS = -lpthread -ldl PLATFORM_CONSOLE_OPTION = EXE_EXT= STRIP_OPTIONS=--strip-all RDYNAMIC=-rdynamic else ifeq ($(OS), Windows_NT) # Windows PLATFORM_ARCH = windows x86_64 PLATFORM_LIBS = win-x86_64 PLATFORM_GENERAL_INCLUDES = -I"$(JAVA_HOME)/include" -I"$(JAVA_HOME)/include/win32" PLATFORM_GENERAL_LINKER_OPTIONS = -static -lmingw32 -lmingwthrd -lws2_32 -mwindows -static-libgcc -static-libstdc++ PLATFORM_CONSOLE_OPTION = -mconsole EXE_EXT=.exe STRIP_OPTIONS=--strip-all RDYNAMIC= endif JAVA_FILES = $(shell cd $(JAVA_SOURCE_PATH); find . -name \*.java | awk '{ sub(/.\//,"") }; 1') JAVA_CLASSES := $(addprefix $(JAVA_CLASSPATH)/,$(addsuffix .class,$(basename $(JAVA_FILES)))) CPP_FILES = $(shell cd $(CPP_SOURCE_PATH); find . -name \*.cpp | awk '{ sub(/.\//,"") }; 1') CPP_OBJECTS := $(addprefix $(OBJECTS)/,$(addsuffix .o,$(basename $(CPP_FILES)))) all: $(BIN)/crossbase $(JAVA_CLASSPATH)/%.class: $(JAVA_SOURCE_PATH)/%.java @echo $(PLATFORM_GENERAL_INCLUDES) if [ ! -d "$(dir $@)" ]; then mkdir -p "$(dir $@)"; fi "$(JAVA_HOME)/bin/javac" -sourcepath "$(JAVA_SOURCE_PATH)" -classpath "$(JAVA_CLASSPATH)" -d "$(JAVA_CLASSPATH)" $< $(OBJ)/%.o: $(SRC)/cpp/%.cpp @echo $(PLATFORM_GENERAL_INCLUDES) mkdir -p $(OBJ) g++ $(DEBUG_OPTIMIZE) -D_JNI_IMPLEMENTATION_ -c $(PLATFORM_GENERAL_INCLUDES) $< -o $@ $(BIN)/crossbase: $(JAVA_CLASSES) $(CPP_OBJECTS) mkdir -p $(BIN); @echo $(PLATFORM_GENERAL_INCLUDES) # Extracting libavian objects ( \ cd $(OBJ); \ mkdir -p libavian; \ cd libavian; \ ar x ../../lib/$(PLATFORM_LIBS)/libavian.a; \ ) # Making the java class library cp lib/java/classpath.jar $(BIN)/boot.jar; \ ( \ cd $(BIN); \ "$(JAVA_HOME)/bin/jar" u0f boot.jar -C java .; \ ) # Making an object file from the java class library tools/$(PLATFORM_LIBS)/binaryToObject $(BIN)/boot.jar $(OBJ)/boot.jar.o _binary_boot_jar_start _binary_boot_jar_end $(PLATFORM_ARCH); \ g++ $(RDYNAMIC) $(DEBUG_OPTIMIZE) -Llib/$(PLATFORM_LIBS) $(OBJ)/boot.jar.o $(CPP_OBJECTS) $(OBJ)/libavian/*.o $(PLATFORM_GENERAL_LINKER_OPTIONS) $(PLATFORM_CONSOLE_OPTION) -lm -lz -o $@ strip $(STRIP_OPTIONS) $@$(EXE_EXT) clean: rm -rf $(OBJ) rm -rf $(BIN) .PHONY: all 

рд╕рд╛рд╡рдзрд╛рди! , make , . , . - тАФ :

 JAVA_FILES = $(shell cd $(JAVA_SOURCE_PATH); find . -name \*.java | awk '{ sub(/.\//,"") }; 1') JAVA_CLASSES := $(addprefix $(JAVA_CLASSPATH)/,$(addsuffix .class,$(basename $(JAVA_FILES)))) CPP_FILES = $(shell cd $(CPP_SOURCE_PATH); find . -name \*.cpp | awk '{ sub(/.\//,"") }; 1') CPP_OBJECTS := $(addprefix $(OBJECTS)/,$(addsuffix .o,$(basename $(CPP_FILES)))) 

unix- find .java $(JAVA_SOURCE_PATH) . . .class , $(JAVA_CLASSPATH) , , , .. . .cpp .o . makefile :

 $(JAVA_CLASSPATH)/%.class: $(JAVA_SOURCE_PATH)/%.java @echo $(PLATFORM_GENERAL_INCLUDES) if [ ! -d "$(dir $@)" ]; then mkdir -p "$(dir $@)"; fi "$(JAVA_HOME)/bin/javac" -sourcepath "$(JAVA_SOURCE_PATH)" -classpath "$(JAVA_CLASSPATH)" -d "$(JAVA_CLASSPATH)" $< $(OBJ)/%.o: $(SRC)/cpp/%.cpp @echo $(PLATFORM_GENERAL_INCLUDES) mkdir -p $(OBJ) g++ $(DEBUG_OPTIMIZE) -D_JNI_IMPLEMENTATION_ -c $(PLATFORM_GENERAL_INCLUDES) $< -o $@ 

, . , ,

 $(BIN)/crossbase: $(JAVA_CLASSES) $(CPP_OBJECTS) ... 

рдпрд╣рд╛рдВ рд╣рдо рд╕рднреА рдорд┐рд▓реА рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рджреЗрдЦрддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдореЗрдХрдлрд╛рдЗрд▓ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╕рднреА рдЬрд╛рд╡рд╛ рдФрд░ рд╕реАрдкреАрдкреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╣реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ред

рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ:



рдЕрд╕реЗрдВрдмрд▓реА рдирд┐рдпрдо рдХреЗ рдЖрдХрд╕реНрдорд┐рдХ рдирд┐рдпрдо рд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗ рджреЗрдВ - $(BIN)/crossbase: $(JAVA_CLASSES) $(CPP_OBJECTS) . libavian.a, . , . Windows - ( ). classpath.jar, bin/java bin/boot.jar. binaryToObject, boot.jar obj/boot.jar.o _binary_boot_jar_start _binary_boot_jar_end ( main.o). , , . , , strip, , , OS X, , MinGW Linux. тАФ . crossbase 9 , тАФ .

3. рд╡рд┐рдЬрдп рдХрд╛ рдПрдХ рдкрд▓


рдХреНрд░реЙрд╕рдмреЗрд╕ / рдмрд┐рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдХреНрд░реЙрд╕рдмреЗрд╕ рдХреЛ рдХрдВрд╕реЛрд▓ рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

 > ./crossbase  ! This is a crossplatform monolith application with Java code inside. Freedom to Java apps! args[0] =  args[1] = ! 


рдкрд░рд┐рдгрд╛рдореА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрд░реЗ GitHub рдкрд░ рд╣реИ ред

4. рдкрд░рд┐рдгрд╛рдо рдФрд░ рдЕрд░реНрде


. , , , , . , , , , C++. Java . C++, . ( ) Java. , , C++, C++ Java . , .

, ┬л┬╗ SWT (, Eclipse), , . , . рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдкреБрдирд╢реНрдЪ
, . .

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


All Articles