рд▓реЗрдЖрдЙрдЯ, рдирд┐рд░реНрднрд░рддрд╛ рдирд░рдХ рдФрд░ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

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



рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдардХ "рд╕рдВрдХрд▓рдХ", "рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓", "рд▓рд┐рдВрдХрд░", "рд╕реНрдЯреЗрдЯрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА", "рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА", "рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓реЛрдбрд░" рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реЗ рдЪрд░рд┐рддреНрд░ рд╕реЗрдЯ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдЪрдмрд╛рдПрдВрдЧреЗред



рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕реНрдереИрддрд┐рдХ рд▓реЛрдбрд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдБ:



  1. main.exe рд╕рдВрд╕реНрдХрд░рдг-0.3.dll рдФрд░ bar.dll рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдмрд╛рд░, рдмрджрд▓реЗ рдореЗрдВ, рд╕рдВрд╕реНрдХрд░рдг-0.2.dll рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрд╕реНрдХрд░рдг 0.3 рдХреЗ рд╕рд╛рде рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ (рди рдХреЗрд╡рд▓ рд╡рд░реНрдг рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирд╛рдо рд╕рдВрдпреЛрдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХ рд╣реИрдВ, рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреГрддрд┐ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЖрджрд┐)ред рд╕рдВрд╕реНрдХрд░рдг -1.0.dll рд╕реЗ рд╡рд░реНрдгреЛрдВ рдХреЛ рд╕рдВрд╕реНрдХрд░рдг-0.3.dll рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг (рдЬреИрд╕реЗ рд╕рдВрд╕реНрдХрд░рдг-0.2.lib) рдФрд░ рдбрд╛рдпрдирд╛рдорд┐рдХ (рд╕рдВрд╕реНрдХрд░рдг-0.3.dll) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╣реА рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ;
  2. рд░реЛрдорд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛: рдбрд╛рдпрдирд╛рдорд┐рдХ рд▓реЛрдбрд░ рдХреЛ рд╡рд░реНрдЬрди рдХрд╣рд╛рдВ рд╕реЗ рджрд┐рдЦреЗрдЧрд╛ред рдкрд┐рдЫрд▓реЗ рдХреЛрдб рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП ?.d.dll рдФрд░ bar.dll? рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ main.exe рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЦреЛрдЬреЗрдЧрд╛? Main.exe рдХреЛ рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдирд┐рд░реНрднрд░рддрд╛ рджрд┐рдЦрд╛рдИ рджреЗ?
  3. рдирд┐рд░реНрднрд░рддрд╛ рдирд░рдХ: рдПрдХ рд╣реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ /opt/kde3/lib/libkdecore.so рдФрд░ /opt/kde4/lib/libkdecore.so (рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдкреНрд▓рд╛рдЬреНрдорд╛ рдЕрдм рдирд╣реАрдВ рдЧрд┐рд░рддрд╛ рд╣реИ), рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╕реЗ рдЖрдзреЗ рдХреЛ рдкрд╣рд▓реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рджреВрд╕рд░реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рджреВрд╕рд░реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдПрдХ рджрд╛рдпрд░реЗ (рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛) рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдмрд┐рдВрджреБ 1 рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд╕реНрдХрд░рдг рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдПрдХ рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдкрд╣рд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдкрд╛рдардХ рдпрд╣ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ: тАЬрд╣рд╛рдБ, рдпрд╣ рд╡рд┐рдХреГрддрд┐ рд╣реИ! рд╡реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ! рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП! тАЭрд╣рд╛рдБ, рдпрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреАрд╡рди рдореЗрдВ рд╕рдм рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг: рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рдмрдВрдж рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдореИрдВ рдЗрд╕ рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реВрдВ, рдХрд┐рд╕реА рдФрд░ рдХреЗ рднреБрдЧрддрд╛рди рдХрд┐рдП рдЧрдП рдЙрддреНрдкрд╛рдж ) рдмреА, рдЬреЛ, рдареАрдХ рд╣реИ, рдЙрд╕реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЖрдк рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред



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



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



рдирд░реНрдХ рд╕реЗ рдмрдЪреЛ


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



рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдПрдХ рдмрд╣реБрдд рд╣реА рдирд┐рдпрдорд┐рдд рдХрд╛рдо рд╣реИред Xyz рдпреЛрдЬрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:



рдлрд┐рд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ xy рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред рдпрджрд┐ рд▓рдШреБ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрдврд╝рд╛рддреЗ рд╕рдордп рд╕рдВрдЧрддрддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпрд╣ рд╕рдВрдЧрдд рд╕рд┐рдорд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:

рд╕рдВрд╕реНрдХрд░рдг-1.1.dll

рд╕рдВрд╕реНрдХрд░рдг- 1.0.dll тЖТ рд╕рдВрд╕реНрдХрд░рдг- 1.1.dll



рд╕рдВрд╕реНрдХрд░рдг -рез.реж.реж рдФрд░ рд╕рдВрд╕реНрдХрд░рдг -рез.реж.x рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреЛрдиреЛрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред



рдпрджрд┐ рд╕рдВрдЧрддрддрд╛ рдЯреВрдЯ рдЧрдИ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреА рдФрд░ рдлрд┐рд░ рд╕реЗ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред



рдпрджрд┐, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдмрдЧ рдлрд┐рдХреНрд╕ рдХреЗ рджреМрд░рд╛рди рд╕рдВрдЧрддрддрд╛ рдЯреВрдЯ рдЧрдИ рдереА, рддреЛ рд▓рдШреБ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдЕрд╕рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╕рдВрджреАрджрд╛ рдХреНрдпреВрдЯреА рдХреА рдЯреАрдо рдиреЗ рдХрд┐рдпрд╛ рдерд╛ред [рез] )ред



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



рдпрд╣ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред



рд╢реЗрд╖ рджреЛ рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдУрдПрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред



ELF рдФрд░ GNU ld (рд▓рд┐рдирдХреНрд╕, * рдмреАрдПрд╕рдбреА, рдЖрджрд┐)


ELF рдкреНрд░рд╛рд░реВрдк рдХреА рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рддрдерд╛рдХрдерд┐рдд SONAME рд╣реИ [2] [рей] ред рдпрд╣ рдПрдХ рд╡рд░реНрдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬреЛ DT_SONAME рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП SONAME рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
$ objdump -p /path/to/file | grep SONAME
      
      





рдпрджрд┐ рдлрд╝реИрдЬрд╝ рдкреНрд░реЛрдЧреНрд░рд╛рдо / рд▓рд╛рдЗрдмреНрд░реЗрд░реА baz рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдмрд╛рдВрдзрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ SONAME = baz-0.dll рд╣реИ , рддреЛ рд▓рд╛рдЗрди baz-0.dll рдХреЛ DT_NEEDED рд╕реЗрдХреНрд╢рди рдореЗрдВ рдмрд╛рдЗрдирд░реА рдлрд╝реИрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЬрдм рдпрд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓реЛрдбрд░ baz рдирд╛рдордХ рдлрд╝рд╛рдЗрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдЧрд╛ -0.dll рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдИ рднреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдирд╛рдо рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ!



рдЖрдк рдЙрди SONAME рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ:
 $ objdump -x /path/to/file | grep NEEDED
      
      





рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓реЛрдбрд░ рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ DT_NEEDED рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ [4] [рел] :

  1. DT_RPATH рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА, рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдб рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ * рдирд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рддред рдЙрдкреЗрдХреНрд╖рд┐рдд рдЕрдЧрд░ рдзрд╛рд░рд╛ DT_RUNPATH рдореМрдЬреВрдж рд╣реИ;
  2. LD_LIBRARY_PATH - рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдПрдХ рд╕реВрдЪреА рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ;
  3. DT_RUNPATH - DT_RPATH рдХреЗ рд╕рдорд╛рди, рдХреЗрд╡рд▓ LD_LIBRARY_PATH рдХреЗ рдмрд╛рдж рджреЗрдЦреА рдЧрдИред рдХреЗрд╡рд▓ рдирд╡реАрдирддрдо рдпреВрдирд┐рдХреНрд╕ рдЬреИрд╕реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рд╕рдорд░реНрдерд┐рдд;
  4. /etc/ld.so.conf - рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓реЛрдбрд░ ld.so рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓, рдЬрд┐рд╕рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ;
  5. рд╣рд╛рд░реНрдб-рд╡рд╛рдпрд░реНрдб рдкрде - рдЖрдорддреМрд░ рдкрд░ / рджреЗрдп рдФрд░ / usr / libред


RPATH, LD_LIBRARY_PATH рдФрд░ RUNPATH рдХрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк рдкрде рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ: рдкрдереЛрдВ рдХреА рдПрдХ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдкреГрдердХ рд╕реВрдЪреАред рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, RUNPATHs рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
 $ objdump -x /path/to/file | egrep 'R(|UN)PATH'
      
      





[UN] PATH рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд▓реЗрдмрд▓ $ ORIGIN рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЗрдХрд╛рдИ рдХреЛ рдкреВрд░реНрдг рдирд┐рд░рдкреЗрдХреНрд╖ рдкрде рдкрд░ рдбрд╛рдпрдирд╛рдорд┐рдХ рд▓реЛрдбрд░ рддреИрдирд╛рдд рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдВ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ RUNPATH рдореЗрдВ "" (рдЕрд╡рдзрд┐) рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣ $ ORIGIN рдЬреИрд╕рд╛ рдирд╣реАрдВ рд╣реИ! рдмрд┐рдВрджреБ рд╡рд░реНрддрдорд╛рди рдХрд╛рдордХрд╛рдЬреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧрд╛, рдЬреЛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рд░ рдХреЗ рдорд╛рд░реНрдЧ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ!



рдЬреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреА 1 рд╕реЗ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗ ( рдЬреАрдердм рдореЗрдВ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ: github.com/gshep/linking-sample )ред рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреА рдЬрдбрд╝ рдореЗрдВ рдЬрд╛рдПрдВ рдФрд░ рдХреЙрд▓ рдХрд░реЗрдВ ./linux_make_good.sh



, result



рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реЛрдЧрд╛ред рдХреБрдЫ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЪрд░рдгреЛрдВ рдкрд░ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред



рд╕рдВрд╕реНрдХрд░рдг- 0.x рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ, SONAME рд╕реЗрдЯ рд╣реИрдВ:
 $ gcc -shared -Wl,-soname,version-0.3.dll -o version-0.3.dll version.o
      
      





рд╡реЗ рдХреЗрд╡рд▓ рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП R [UN] PATH рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред



рдмрд╛рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрд╕реНрдХрд░рдг 0.2 рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ RPATH рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 $ gcc -shared -Wl,-rpath-link,/path/to/version-0.2/ -L/path/to/version-0.2/ -l:version-0.2.dll -Wl,-rpath,\$ORIGIN/ -Wl,--enable-new-dtags -Wl,-soname,bar.dll -o bar.dll bar.o
      
      





--enable-new-dtags



рд▓рд┐рдВрдХрд░ рдХреЛ DT_RUNPATH рдЕрдиреБрднрд╛рдЧ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред



-Wl,-rpath,...



R [UN] PATH рдЕрдиреБрднрд╛рдЧ рдХреЛ рднрд░рддрд╛ рд╣реИред рд░рд╛рд╕реНрддреЛрдВ рдХреА рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрдИ рдмрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдПрдХ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдкрдереЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 $ gcc -Wl,-rpath,/path/1/ -Wl,-rpath,/path/2 ... $ gcc -Wl,-rpath,/path/1:/path/2 ...
      
      





рдЕрдм рдкрд░рд┐рдгрд╛рдо рдлрд╝реЛрд▓реНрдбрд░ рдпрд╛ рд╕рдВрдкреВрд░реНрдг рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рдВрдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдХреЛ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓реЛрдбрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдорд┐рд▓реЗрдВрдЧреА рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛:
 $ ./result/main.exe Hello World! bar library uses libversion 0.3.0, number = 3 version::get_version result = 0 But I uses liversion 0.3.0 number = 3
      
      





рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд╕рдореЗрдЯрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рдЖрддреЗ рд╣реИрдВ! Bar рд╕рдВрд╕реНрдХрд░рдг-0.2.dll рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ get_number (2) рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд╕реНрдХрд░рдг-0.3.dll, рдЬрд╣рд╛рдВ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реМрдЯрддрд╛ рд╣реИред 3. рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, get_number рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рджреВрд╕рд░реЗ рд╕реЗ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рд╣реИред



рддрдереНрдп рд╣реИ [6; рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд┐рдВрдХрд┐рдВрдЧ рдФрд░ рд▓реЛрдбрд┐рдВрдЧ, рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд┐рдВрдХрд┐рдВрдЧ рдПрдкреНрд░реЛрдЪ рдХреА рддреБрд▓рдирд╛] рдХрд┐ GNU ld & ELF рд╕реЛрдирдо рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдпрд╛рддрд┐рдд рд╡рд░реНрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

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



рдорд╛рдорд▓рд╛ рдЬрдм рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ рд╣реИ рддреЛ рдмрд╕ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕реНрдереИрддрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рднреА рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рд╣реЛрдЧрд╛ [Def.реи, реи.реи.реи рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ] ред



рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪреАрдЬреЗрдВ рдЗрддрдиреА рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИрдВред GNU рд▓рд┐рдВрдХрд░ / рд▓реЛрдбрд░ рдореЗрдВ рдбрд╛рдпрд░реЗрдХреНрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЬреИрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ []] ред рдХрд┐рд╕реА рдиреЗ рдЧреЗрдиреНрдЯ рдореЗрдВ рдЗрд╕ рдЕрд╡рд╕рд░ рдХреЛ рджреЗрдЦрд╛ [реп] рд▓реЗрдХрд┐рди рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ред рдбреАрдЬрд▓ рдИрдВрдзрди рдореЗрдВ рд╡рд╣ рд╣реИ [10] [резрез] рд▓реЗрдХрд┐рди рд╕реЛрд▓реЗрдпрд╛рд░реНрдХрд╛ рдХреА рдореГрддреНрдпреБ рд╣реЛ рдЧрдИ ...



рдПрдХ рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реИ рдХрд┐ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рд╣реА рд╕рдВрд╕реНрдХрд░рдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП [Use, реи.реи.рел рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдореИрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ] ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рддреНрд░реЛрдВ рдХреА рддрд░рд╣ рд╣реИред (рдЖрдк рдХреЗрд╡рд▓ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ C ++ рдореЗрдВ рдПрдХ рдкрд╛рдардХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдм рдХреНрдпрд╛ рдЪрд┐рд▓реНрд▓рд╛ рд░рд╣рд╛ рд╣реИ ...)



рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдПрдХ рддрдерд╛рдХрдерд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдкрд┐ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдирд┐рд░реНрдпрд╛рдд рдФрд░ рдЫрд┐рдкреА рд╣реБрдИ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рд╣реИ [12] [резрей] ред рд╕рдВрд╕реНрдХрд░рдг -1.5 рд╕реЗ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдкрд┐:

  VERSION_0.3 {
     рд╡реИрд╢реНрд╡рд┐рдХ:
         get_version;
         get_version2;
         get_number;
     рд╕реНрдерд╛рдиреАрдп:
         *;
 }; 


рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдЬ рдкрд░, --version-script=/path/to/version.script



рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрд╛рдо рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдирдИрдИрдбреАрдИрдбреА рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг -реж.реж.релрел рдорд┐рд▓реЗрдЧрд╛, рдФрд░ рдЖрдпрд╛рдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд░рд┐рддреНрд░ get_number@@VERSION_0.3



рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ int get_number () рдЕрднреА рднреА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣реЛрдЧрд╛ред



Glibc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░ nm рд╕реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ!



рд╕рдВрд╕реНрдХрд░рдг 0.x рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рд╡рд░реНрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, linux_make_good.sh



рд░реВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ use_version_script



рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд░реЗрдВ:
 $ ./linux_make_good.sh use_version_script $ ./result/main.exe Hello World! bar library uses libversion 0.2.0, number = 2 version::get_version result = 0 But I uses liversion 0.3.0 number = 3 $ nm ./result/main.exe // тАж U get_number@@VERSION_0.3 U get_version@@VERSION_0.3 0000000000401008 T main U memset@@GLIBC_2.2.5 $ nm ./result/bar.dll // тАж U get_number@@VERSION_0.2 U get_version2@@VERSION_0.2 0000000000000800 t register_tm_clones U strcat@@GLIBC_2.2.5
      
      





http://nooooooooooooooo.com/



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



рдореИрдХ рдкрд░ рдЪреАрдЬреЗрдВ рдХреИрд╕реА рд╣реИрдВ?


рдореИрдХ рдПрдХреНрд╕рд┐рд╕ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдФрд░ рджреЛ-рд╕реНрддрд░реАрдп рдирд╛рдорд╕реНрдерд╛рди рд╡рд░реНрдгреЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП Mach-o рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ [резрек, рджреЛ-рд╕реНрддрд░реАрдп рдирд╛рдорд╕реНрдерд╛рди] [резрем] ред рдпрд╣ рдЕрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдПрдХ рдлреНрд▓реИрдЯ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рд╕рд╛рде рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ [резрел, FORCE_FLAT_NAMESPACE] ред рдХрдорд╛рдВрдб рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреА рдХрд┐ рдХреНрдпрд╛ рдирд╛рдо рд╕реНрдерд╛рди рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 $ otool -hv /path/to/binary/file
      
      





рдпрд╣реА рд╣реИ, рдЖрдкрдХреЛ рдирд╛рдореЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдЬрд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рд╕реНрдирд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдмрд╕ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ!



рд▓реЗрдХрд┐рди рдирд┐рд░реНрднрд░рддрд╛ рдЦреЛрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?



Makoshi рдореЗрдВ, рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред



SONAME рдХреЗ тАЛтАЛрдмрдЬрд╛рдп рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп id рдпрд╛ рд╕рдВрд╕реНрдерд╛рдкрд┐рдд рдирд╛рдо рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
 $ otool -D /usr/lib/libstdc++.dylib
      
      



рдЖрдк install_name_tool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд┐рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╕рдордп, рдЙрд╕рдХреА рдЖрдИрдбреА рдмрд╛рдЗрдирд░реА рдореЗрдВ рд▓рд┐рдЦреА рд╣реЛрддреА рд╣реИред



рдЖрдк рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
 $ otool -L /path/to/main.exe
      
      



рдпрд╛
 $ dyldinfo -dylibs /path/to/main.exe
      
      





рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рдбрд╛рдЗрд▓реНрдб "рдЖрдИрдбреА" рдирд╛рдордХ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ [резрел, рдбрд╛рдпрдирд╛рдорд┐рдХ рд▓рд┐рдмреНрд░рд░реА рдЯреНрд░реЗрдбрд┐рдВрдЧ] , рдЬреЛ рд╕реНрдерд╛рдкрд┐рдд рдирд╛рдо рдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░рдкреЗрдХреНрд╖ рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ DYLD_LIBRARY_PATH (LD_LIBRARY_PATH рдХрд╛ рдкреВрд░реНрдг рдПрдирд╛рд▓реЙрдЧ) рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдирд╛рдо / рдкреНрд░рддреНрдпрдп "рдЖрдИрдбреА" рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдЦреЛрдЬрддрд╛ рд╣реИред



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



рдпрд╣ рдпреЛрдЬрдирд╛ рдЖрдкрдХреЛ рд░реЛрдорд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд▓реЗрдмрд▓ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдЖрдИрдбреА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: @ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп_рдерд╛рдирд╛рде /ред рдмреВрдЯ рд╕рдордп рдкрд░ рдпрд╣ рдЪрд┐рд╣реНрди рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░рдкреЗрдХреНрд╖ рдкрде рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рдЕрдЧрд▓рд╛, рдЖрдк рд╕рдорд╛рдкреНрдд рдмрд╛рдЗрдирд░реА рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
 $ install_name_tool -change /usr/lib/libstdc++.dylib @executable_path/libstdc++.dylib main.exe
      
      





рдЕрдм рд▓реЛрдбрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ main.exe рдХреЗ рд╕рдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░реЗрдЧрд╛ред рд╕рдорд╛рдкреНрдд рдмрд╛рдЗрдирд░реА рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ libstdc ++ рдХреЛ рд╕реНрд▓рд┐рдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред Dylib lib with id = @ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп_path / libstdc ++ред рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди Dylibред



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



main.bin Library.dll рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдХрд░рдг / рд╕рд╣рд╛рдпрдХ.рдмрд┐рди рднреА рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдЙрд╕реА рд╕рдордп, рдЖрдИрдбреА = @ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп_рдкрд╛рда / рдкреБрд╕реНрддрдХрд╛рд▓рдп.рдбрд╛рд▓, рдФрд░ рджреЛрдиреЛрдВ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдмрд╕ рдЗрд╕реЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдереЗред рдлрд┐рд░, рдЬрдм рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реЛ редbin, рдмреВрдЯрд▓реЛрдбрд░ /path/to/tools/library.dll рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛! рдмреЗрд╢рдХ, рдЖрдк рд▓рд┐рдВрдХ рдХреЛ рдирд░рдо рдХрд░рдиреЗ рдпрд╛ рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрд╛рдж рдХрд▓рдореЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдХрд░рдг / рд╕рд╣рд╛рдпрдХ.рдмрд┐рди рдХреЛ рд╕рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рдЕрд╕реБрд╡рд┐рдзрд╛!



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



1.plugin рдореЗрдВ рдПрдВрдЯреНрд░реА @ execable_path / helper.dylib рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рдпрд╣ main.bin рдХреЗ рдирд┐рд░рдкреЗрдХреНрд╖ рдкрде рддрдХ рд╡рд┐рд╕реНрддреГрдд рд╣реЛрдЧрд╛, рди рдХрд┐ 1.plugin!



рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╕рд┐рд╕ 10.4 рд╕реЗ рдпрд╛рдмреНрд▓реЛ рд▓реЛрдЧреЛрдВ рдиреЗ рдПрдХ рдирдпрд╛ рдорд╛рд░реНрдХрд░ рдкреЗрд╢ рдХрд┐рдпрд╛: @ рд▓реЛрдбрд░_рдкреИрде /ред рдирд┐рд░реНрднрд░рддрд╛ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рдорд╛рд░реНрдХрд░ рдмрд╛рдЗрдирд░реА рдХреЗ рдкреВрд░реНрдг рдкрде рддрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧрд╛ рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИред



рдЖрдЦрд┐рд░реА рдХрдард┐рдирд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдХреБрдЫ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдЖрдИрдбреА = /usr/lib/libfoo.dylib рд╣реЛрдЧрд╛, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреА рдЖрдИрдбреА = @ рд▓реЛрдбрд░ -path / libfoo.dylibред рдпрд╣ install_name_tool рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдердХрд╛рдК; рдЗрд╕рд▓рд┐рдП, рд╕рдВрд╕реНрдХрд░рдг 10.5 рд╕реЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ @ rpath / рд▓реЗрдмрд▓ рджрд░реНрдЬ рдХрд┐рдпрд╛ред рдкреБрд╕реНрддрдХрд╛рд▓рдп id = @ rpath / libfoo.dylib рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрд╣реАрдВ рднреА рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмрд╛рдЗрдирд░реА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рддрд▓рд╛рд╢ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ @ {рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп, рд▓реЛрдбрд░} _path / рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ:
 $ gcc ... -Xlinker -rpath -Xlinker '@executable_path/libs' -Xlinker -rpath -Xlinker '/usr/lib' ...
      
      





рдпрд╣ ELF рдХреЗ рд▓рд┐рдП RPATH / RUNPATH рдХреЗ рд╕рдорд╛рди рд╣реИред рдЬрдм рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд▓рд╛рдЗрди @ rpath / libfoo.dylib рдХреЛ @ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп_рдкрде / libs / libfoo.dylib рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдирд┐рд░рдкреЗрдХреНрд╖ рдкрде рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрдЧрд╛ред рдпрд╛ /usr/lib/libfoo.dylib рдкрд░ рддреИрдирд╛рдд рд╣реИрдВред



рдЖрдк рдмрд╛рдЗрдирд░реА рдХреЛ рд╡рд╛рдпрд░реНрдб rpaths рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
 $ otool -l main.bin | grep -A 2 -i lc_rpath
      
      





рдЖрдк install_name_tool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ rpaths рдХреЛ рд╣рдЯрд╛, рд╕рдВрд╢реЛрдзрд┐рдд рдпрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред



рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
 $ ./macosx_make_good.sh Building version-0.2 Building version-0.3 Building bar Building fooapp $ ./result/main.exe Hello World! bar library uses libversion 0.2.0, number = 2 version::get_version result = 0 But I uses liversion 0.3.0 number = 3
      
      





IOS рдкрд░, рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИред



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



рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╡рд┐рдВрдбреЛрдЬ!


рдпрд╣рд╛рдВ рднреА рд╕рдм рдареАрдХ рд╣реИ [6; рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд┐рдВрдХрд┐рдВрдЧ рдФрд░ рд▓реЛрдбрд┐рдВрдЧ, рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд┐рдВрдХрд┐рдВрдЧ рдЕрдкреНрд░реЛрдЪ рдХреА рддреБрд▓рдирд╛] ред рдЖрдкрдХреЛ рдмрд╕ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ ... рдХреЛрдИ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдирд╣реАрдВ! рдпрд╣реА рд╣реИ, рд╡реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдИ рд▓реЛрдЧ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдХреЗрд╡рд▓ NTFS рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (рд╡рд┐рдВрдбреЛрдЬ рдПрдХреНрд╕рдкреА рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдлрдПрдЯреА рд╡рд┐рднрд╛рдЬрди рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) ред рдЗрд╕рд▓рд┐рдП, рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдХреА рдПрдХ рд╕рднреНрдп рд░рд╛рд╢рд┐ рдЦрд░реНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ... рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИред )



рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрдВрд╕реЛрд▓ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдЧреЗ рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рд▓реЙрдиреНрдЪ:
 > .\windows_make_good.bat // ... >.\result\main.exe Hello World! bar library uses libversion 0.2.0, number = 2 version::get_version result = 0 But I uses liversion 0.3.0 number = 3
      
      





рдЭреВрда рдмреЛрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдорд╛рдВрдЧрд╛ рдЬрд╛рддрд╛ рд╣реИред [рез]] ред рдирд┐рд░реНрднрд░рддрд╛ рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдФрд░ рдкреНрд░реЛрдмрд┐рдВрдЧ рдХреА рдкреНрд░рд╛рдЗрд╡реЗрдЯрдкреИрде рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ [рез]] ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ 7 / рд╕рд░реНрд╡рд░ 2008 R2 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред



рдФрд░ рд╡рд╣рд╛рдБ WinSxS рдФрд░ рддрдерд╛рдХрдерд┐рдд рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ (рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ) [рез реп] ред рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдпрд╣ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рддреЛ рдпрд╣ рд╕рдордЭ рдФрд░ рд╕рдордЭ рдХрд┐ рдЗрди рдЕрд╕реЗрдВрдмрд▓реАрдЬрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗрд╡рд▓ (рдХрдо рд╕реЗ рдХрдо Sishniki рдФрд░ C ++ рдЙрдкрдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП) рдереА, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╣реБрдП рдереЗ, рдХрд╣рддреЗ рд╣реИрдВ, comdlg32.dll, рд▓реЗрдХрд┐рди рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдХрдо рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рдирд┐рд╖реНрдХрд░реНрд╖


рд╕рднреА рдкреНрд░рдореБрдЦ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдкреА рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдкрдиреЗ рджрдо рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдирд░рдХ, рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛, рдФрд░ рдЪрд░рд┐рддреНрд░ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред



рдореБрдЦреНрдп рдирд┐рд░реНрдгрдп рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдФрд░ рдЙрд╕ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХрд░рдирд╛ рд╣реИред



рдЬрдмрдХрд┐ рдХреНрдпреВрд░рд┐рдпреЛрд╕рд┐рдЯреА рдиреЗ рдорд╛рд░реНрдЯрд┐рдпрди рдЦреБрд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рдХреА рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдХреА, рд▓реЗрдЦрдХ рдиреЗ рдпрд╣рд╛рдВ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдУрд╡рд░рд░рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рд╕реЗ рдХреИрд╕реЗ рдмрдЪрд╛ рдЬрд╛рдП, рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╣рдм рдкрд░ рд▓реЗрдЦ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рдкрд░реАрдд рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ: habrahabr.ru/post/106107 , habrahabr.ru/post/ 115558 рд╣реИ ред



рдкреБрдирд╢реНрдЪ рдЬрдм рдЗрд╕ рд▓реЗрдЦ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рддрдм рд▓реЗрдЦрдХ рдиреЗ "рдСрди рд╕реНрдЯреНрд░рд╛рдЗрдХ!" рд╕рдореНрдореЗрд▓рди рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛, рдЬрд╣рд╛рдБ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреИрд╡реЗрд▓реНрд╕ рдХреЗред рдирд╛рдЬрд╝рд░реЛрд╡ рдХреА рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдирд╛ред [реиреж] рд╡рд╣рд╛рдБ рдХреБрдЫ рднреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдпрд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдХрдВрдкрдиреА рдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рд╕рд╣реА рдирд┐рд╖реНрдХрд░реНрд╖ рдмрдирд╛рдпрд╛ред рдЦреБрдж рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рд▓реЗрдЦ рд╕реЗ, рд▓реЗрдЦрдХ рдиреЗ рд╡рд╣рд╛рдВ рд╕реЗ рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рдпрд╛: semver.org ред



рдореИрдВ рдЕрдкрдиреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рд╕рд┐рджреЛрд░реЛрд╡ рдФрд░ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдкреНрд░реЛрдХреЛрдлреАрд╡ рдХреЛ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рдореВрд▓реНрдпрд╡рд╛рди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд▓реЗрддрд╛ рд╣реВрдВ!



рд╕рдВрджрд░реНрдн


  1. ^ QtMultimedia рдкрд░рд┐рд╡рд░реНрддрди-5.0.1
  2. ^ http://en.wikipedia.org/wiki/Soname
  3. ^ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА HOWTO, 3.1.1ред рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╛рдо ред
  4. ^ рдЖрджрдореА ld-linux.so
  5. ^ http://en.wikipedia.org/wiki/Rpath
  6. рдЬреЙрди рдЖрд░ рд▓реЗрд╡рд┐рди, http://www.iecc.com/linker/ рджреНрд╡рд╛рд░рд╛ 1 2 рд▓рд┐рдВрдХрд░реНрд╕ рдФрд░ рд▓реЛрдбрд░ред
  7. ^ 1 2 рдЙрд▓рд░рд┐рдЪ рдбреНрд░реЗрдкрд░ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ, http://www.akkadia.org/drepper/dsohowto.pdf (pdf)ред
  8. ^ http://en.wikipedia.org/wiki/Direct_binding
  9. ^ https://bugs.gentoo.org/show_bug.cgi?id=114008
  10. ^ https://blogs.oracle.com/msw/date/2005050614
  11. ^ http://cryptonector.com/2012/02/dll-hell-on-linux-but-not-solaris/ ред
  12. ^ https://sourceware.org/binutils/docs/ld/VERSION.html
  13. ^ http://www.tux.org/pub/tux/eric/elf/docs/GNUvers.txt
  14. ^ рдЖрджрдореА ldред
  15. ^ 1 2 3 рдореИрди рдбрд╛рдЗрд▓реНрдбред
  16. ^ http://en.wikipedia.org/wiki/Mach-O#Mach-O_file_layout
  17. ^ MSDN, рдбрд╛рдпрдиреЗрдорд┐рдХ-рд▓рд┐рдВрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рд░реНрдЪ рдСрд░реНрдбрд░, http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586%28v=vs.85%29.aspx ред
  18. ^ http://stackoverflow.com/a/10390305/1758733
  19. ^ http://en.wikipedia.org/wiki/WinSXS
  20. ^ рдирд╛рдЬрд╝рд░реЛрд╡ рдХреЗред, рд╡рд░реНрдЬрд╝рдирд┐рдВрдЧ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рдкрдХреНрд╖рдкрд╛рддреА рдирдЬрд╝рд░, http://nastachku.ru/lectures#lecture_178 ред
  21. рдУрд░реЗрдХрд▓, рд▓рд┐рдВрдХрд░ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЧрд╛рдЗрдб, http://docs.oracle.com/cd/E19683-01/817-1983/index.html ред
  22. рд▓рд┐рдВрдХрд░ рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рдЧрд╛рдЗрдб, http://habrahabr.ru/post/150327/ ред



All Articles