2.3.4. ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ°ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½Ρ ΠΎΠ΄Π½Π° Ρ Π΄ΡΡΠ³ΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ Linux-ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° libtiff, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠΎΡΠΌΠ°ΡΠ° TIFF. ΠΠ½Π°, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ libjpeg (ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ JPEG-ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ) ΠΈ libz (ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΆΠ°ΡΠΈΡ).
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 2.9 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ libtiff Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ TIFF-ΡΠ°ΠΉΠ»ΠΎΠΌ.
ΠΠΈΡΡΠΈΠ½Π³ 2.9. (tifftest.c) ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ libtiff#include <stdio.h>
#include <tiffio.h>
int main(int argc, char** argv) {
TIFF* tiff;
tiff = TIFFOpen(argv[1], "r");
TIFFClose(tiff);
return 0;
}
ΠΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ»Π°Π³ -ltiff:
% gcc -ΠΎ tifftest tifftest.c -ltiff
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ Π²Π΅ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ: /usr/lib/libtiff.so. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΠΌ ΡΡΠΎ ΠΎΠ½Π° ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌ libjpeg ΠΈ libz (ΠΎΠ΄Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½Π° Π·Π°Π²ΠΈΡΠΈΡ), Π±ΡΠ΄ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ ΠΈΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π²Π΅ΡΡΠΈΠΈ. Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΎ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ldd:
% ldd tifftest
libtiff.so.3 => /usr/lib/libtiff.so.3 (0x4001d000)
libc.so.6 => /lib/libc.so.6 (0x40060000)
libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x40155000)
libz.so.1 => /usr/lib/libz.so.1 (0x40174000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Π ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΠΎΠΌΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΡΠ»ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ Π²Π΅ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ libtiff, ΡΠΊΠ°Π·Π°Π² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΎΠΏΡΠΈΡ -static, ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΡΡ Ρ Π½Π΅ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π΅ΠΌΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌΠΈ:
% gcc -static -ΠΎ tifftest tifftest.Ρ -ltiff
/usr/bin/../lib/libtiff.a(tif_jpeg.o): In function
'TIFFjpeg_error_exit':
tif_jpeg.ΠΎ(.text+0x2a): undefined reference to 'jpeg_abort'
/usr/bin/../lib/libtiff.a (tif_jpeg.o): In function
'TIFFjpeg_create_compress':
tif_jpeg.o(.text+0x8d): undefined reference to 'jpeg_std_error'
tif_jpeg.o(.text+0xcf): undefined reference to
'jpeg_CreateCompress'
...
Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½ΡΠΆΠ½ΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π΄Π²Π΅ Π΄ΡΡΠ³ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
% gcc -static -o tifftest tifftest.c -ltiff -ljpeg -lz
ΠΠ½ΠΎΠ³Π΄Π° ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π²Π·Π°ΠΈΠΌΠ½Π°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΡ ΠΈΠ² ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ Π°ΡΡ ΠΈΠ²Π΅, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. Π’Π°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ΠΌ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·. ΠΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ ΠΏΡΠΎΡΠΌΠΎΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ½Π° ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
% gcc -o app Π°ΡΡ.ΠΎ -lfoo -lbar -lfoo
Π’Π΅ΠΏΠ΅ΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° libfoo.a ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ libbar.a ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Π½Π°.
2.3.5. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
ΠΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ²ΡΠΈΡΡ ΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π°ΡΡ ΠΈΠ²Π°ΠΌΠΈ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ. ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π·Π°Π΄ΡΠΌΠ°Π»ΠΈΡΡ: ΠΊΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΈΠ· Π½ΠΈΡ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ? ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΠΆΠ½ΡΡ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ², ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡ.
ΠΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ. ΡΡΠΎ ΠΎΠ½Π° ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΠΌΠ΅ΡΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠ΅ ΠΏΡΠΈ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΠ³Π΄Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π΄Π΅ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ Π²ΡΠ΅ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ, ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π²Π΅ΡΡΠΌΠ° ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°ΡΡ ΠΈΠ² Π±ΡΠ΄Π΅Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ Π²ΠΎ Π²ΡΠ΅ Π΄Π΅ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. Π£ΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΈΠ· Internet.
Π‘ ΡΡΠΈΠΌ ΡΠ²ΡΠ·Π°Π½ΠΎ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ: ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Ρ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΡΠΎ Π±ΡΠ»Π° ΡΠΎΠ·Π΄Π°Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ HTTP- ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΠΌΠΈ. ΠΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Ρ Π½Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΡΠ»ΠΈ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π΅Π΅ ΡΠ°ΠΉΠ», ΠΈ Π²ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΡΡΡΡ. ΠΠ΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡ Π²ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠ°ΠΊ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°ΡΡ ΠΈΠ²Π°.
ΠΠΏΠΈΡΠ°Π½Π½ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΌΠΎΠ³ΡΡ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ, Π±ΡΠ΄ΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°ΡΡ ΠΈΠ²Ρ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½Ρ. ΠΠΎ ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½ΠΎ Π²Π΅ΡΠΊΠΈΠΌΠΈ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌΠΈ. Π’ΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΎΡΡΠ°ΠΆΠ°Π΅ΡΡΡ Π½Π° Π²ΡΠ΅Ρ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π½Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ , ΠΌΠΎΠΆΠ΅Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅.
ΠΡΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠ½ΡΡΠ°Π»Π»ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ /lib ΠΈΠ»ΠΈ /usr/lib, Π½ΡΠΆΠ½ΠΎ Π΄Π²Π°ΠΆΠ΄Ρ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ, ΡΡΠΎΠΈΡ Π»ΠΈ ΠΈΡ Π΄Π΅Π»Π°ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌΠΈ. (ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅Π»ΡΠ·Ρ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π² ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ, Π΅ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±ΡΠ΄ΡΡ ΠΈΠ½ΡΡΠ°Π»Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΠ΅ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°.) Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΈΠ΅ΠΌ Ρ ΡΠ»Π°Π³ΠΎΠΌ -Wl,-rpath Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠΊΠ°ΠΆΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π ΠΏΡΠΎΡΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ LD_LIBRARY_PATH β Π½Π΅ Π²ΡΡ ΠΎΠ΄ ΠΈΠ· ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π΄Π»Ρ Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ (Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ β Π½Π΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ) Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
ΠΡΠ΅Π½ΠΈΠ²Π°ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ Π΄Π²ΡΡ ΡΠΈΠΏΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
2.3.6. ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈ Π²ΡΠ³ΡΡΠ·ΠΊΠ°
ΠΠ½ΠΎΠ³Π΄Π° Π½Π° ΡΡΠ°ΠΏΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠ΄ Π±Π΅Π· ΡΠ²Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠ΅Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ: Web-Π±ΡΠΎΡΠ·Π΅Ρ. ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π±ΡΠΎΡΠ·Π΅ΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠ°ΡΡΠΈΡΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π±ΡΠΎΡΠ·Π΅ΡΠ°. ΠΠΎΠ΄ΡΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² Π·Π°ΡΠ°Π½Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅. ΠΡΠΎΡΠ·Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΊΠΎΠ΄ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°.
ΠΠ»Ρ ΡΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ Π² Linux ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ dlopen(). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠΊΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ libtest.so ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
dlopen("libtest.so", RTLD_LAZY)
ΠΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ β ΡΡΠΎ ΡΠ»Π°Π³, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅. ΠΠ°Π½Π½Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π². ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ·Π½Π°ΡΡ ΠΎ Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ <dlfcn.h>. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°ΡΡΡΡ Ρ ΡΠ»Π°Π³ΠΎΠΌ -ldl, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ libdl.
Π€ΡΠ½ΠΊΡΠΈΡ dlopen() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° void*, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ dlsym(), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°Π΄ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΠΎΠΉ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ libtest.so ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ my_function(), ΡΠΎ ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
void* handle = dlopen("libtest.so", RTLD_LAZY);
void (*test)() = dlsym(handle, "my_function");
(*test)();
dlclose(handle);
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ dlsym() ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡΡ Π² ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅.
ΠΠ±Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, dlopen() ΠΈ dlsym(), Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ NULL. Π Π΄Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ dlerror() (Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²), ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΡΠ΅ΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ dlclose() Π²ΡΠ³ΡΡΠΆΠ°Π΅Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ. Π‘ΡΡΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΠ½ΠΊΡΠΈΡ dlopen() Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π»ΠΈΡΡ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π΅ΡΠ΅ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΈΡΠ»ΠΎ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΡΠ°ΠΉΠ». ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡ dlclose() ΡΠ½Π°ΡΠ°Π»Π° ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΡΡΠ΅ΡΡΠΈΠΊ ΡΡΡΠ»ΠΎΠΊ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ°Π²Π½ΡΠΌ Π½ΡΠ»Ρ, Π²ΡΠ³ΡΡΠΆΠ°Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
ΠΠΎΠ³Π΄Π° ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΈΡΠ΅ΡΡΡ Π½Π° C++, ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ extern "Π‘". ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ my_function() Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° C++ ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, Π° Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π½Π΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ dlsym(), ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅ Π΅Π΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
extern "Π‘" void my_function();
Π’Π΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ C++ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡΡ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° extern "Π‘" ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΈ my_function ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π΄ΡΡΠ³ΠΎΠ΅ ΠΈΠΌΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ·ΡΠΊΠ° Π‘ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΈΠΌΠ΅Π½Π°; ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠ΅ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ.
ΠΠ»Π°Π²Π° 3
ΠΡΠΎΡΠ΅ΡΡΡ
ΠΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ. ΠΡΠ»ΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π΄Π²Π° ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΡΡ ΠΎΠΊΠ½Π°, ΡΠΎ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΎΠ΄Π½Π° ΠΈ ΡΠ° ΠΆΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°ΠΏΡΡΠ΅Π½Π° Π΄Π²Π°ΠΆΠ΄Ρ β Π΅ΠΉ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π΄Π²Π° ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠΊΠ½Π΅, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ β ΡΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²ΠΎΠ΄ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π½ΠΎΠ²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°.