多くのチュートリアルでは、-staticの追加は静的コンパイルであると述べていますが、初心者にとっては例で理解するのは簡単ではないかもしれません。本日は、この知識の例を紹介します。
最近、freetypeフォントに取り組んでいます。freetypeが提供する公式ライブラリに依存する必要があります。コンピューター側で環境を構成しました。次に示すように、-staticを使用する場合と使用しない場合の2つの実行可能プログラムをコンパイルしました。 、-staticでコンパイルされたファイルは明らかに大きくなります。これは、プログラムが依存するいくつかのライブラリファイルをファイルにリンクしており、ARM開発ボードでプログラムを実行するときにライブラリに依存する必要がないためです。 -静的ランタイムには依存ライブラリが必要です。
root@ubuntu:/home/linuxsystemcode/04th_print_info# arm-none-linux-gnueabi-gcc -finput-charset=GBK -o example1_static example1.c -lfreetype -lm -static
root@ubuntu:/home/linuxsystemcode/04th_print_info#
root@ubuntu:/home/linuxsystemcode/04th_print_info#
root@ubuntu:/home/linuxsystemcode/04th_print_info# ls
example1.c example1_static simsun.ttc
root@ubuntu:/home/linuxsystemcode/04th_print_info# arm-none-linux-gnueabi-gcc -finput-charset=GBK -o example1 example1.c -lfreetype -lm
root@ubuntu:/home/linuxsystemcode/04th_print_info# ls
example1 example1.c example1_static simsun.ttc
root@ubuntu:/home/linuxsystemcode/04th_print_info# ls -l
total 12728
-rwxr-xr-x 1 root root 13481 Aug 16 22:54 example1
-rw-r--r-- 1 root root 4698 Aug 15 19:57 example1.c
-rwxr-xr-x 1 root root 2491106 Aug 16 22:53 example1_static
-rw-r--r-- 1 root root 10512288 Jul 11 00:18 simsun.ttc
静的にコンパイルされたプログラムは開発ボードで直接実行できますが、動的にコンパイルされたプログラムは
[root@iTOP-4412]# ./example1_static ./simsun.ttc
Uniocde:
0x97e6 0x67 0x69 0x66
Unicode: 0x97e6
./example1 ./simsun.ttc
./example1: error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory
開発ボードでプログラムを実行する必要がある場合は、以下に示すように、プログラムが依存するライブラリを開発ボードの/ libディレクトリにコピーする必要があります。
[root@iTOP-4412]# cp /mnt/udisk/lib/* /lib/ -rf -d
[root@iTOP-4412]# ./example1 ./simsun.ttc
Uniocde:
0x97e6 0x67 0x69 0x66
Unicode: 0x97e6
これらの依存ファイルは、クロスコンパイルツールチェーンで見つける必要があります。鉱山は/ usr / local / arm / arm-2009q3 / arm-none-linux-gnueabi / libc / libにあります。パスは環境によって異なります、実際の状況によると。