Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
静的ライブラリと 共有ライブラリの違いを実験で確認
Search
Satoru Takeuchi
PRO
December 27, 2024
Technology
1
47
静的ライブラリと 共有ライブラリの違いを実験で確認
以下動画のテキストです。
https://youtu.be/JYu85UZPzVE
Satoru Takeuchi
PRO
December 27, 2024
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
RubyでKubernetesプログラミング
sat
PRO
4
180
プロセスの生成 exec編
sat
PRO
1
35
プロセスの生成 fork&exec編
sat
PRO
0
29
プロセスの生成 コピーオンライトを使ったfork編
sat
PRO
0
28
プロセスの生成 fork編
sat
PRO
0
32
ハイテク休憩
sat
PRO
2
200
利きプロセススケジューラ
sat
PRO
5
3.3k
俺とVSCode Python Debugger Extension
sat
PRO
1
220
コード再利用のしくみ ライブラリ
sat
PRO
3
86
Other Decks in Technology
See All in Technology
Power BI は、レポート テーマにこだわろう!テーマのティア表付き
ohata_ds
0
130
サーバーレスで楽しよう!お気軽に始められる3つのポイント / Have fun with Serverless!
_kensh
2
250
AWSでRAGを実現する上で感じた3つの大事なこと
ymae
1
400
Fin-JAWS第38回reInvent2024_全金融系セッションをライトにまとめてみた
mhrtech
1
150
個人開発発表 LT - Shinjuku.rb #97
kozy4324
0
100
Grafanaのvariables機能について
tiina
0
200
マルチデータプロダクト開発・運用に耐えるためのデータ組織・アーキテクチャの遷移
mtpooh
1
310
Server Side Swift 実践レポート: 2024年に案件で採用して見えた課題と可能性
yusuga
1
440
テストアーキテクチャ設計で実現する高品質で高スピードな開発の実践 / Test Architecture Design in Practice
ropqa
2
110
EDRからERM: PFN-SIRTが関わるセキュリティとリスクへの取り組み
pfn
PRO
0
130
あなたはJVMの気持ちを理解できるか?
skrb
5
2k
AWSエンジニアに捧ぐLangChainの歩き方
tsukuboshi
0
240
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Bash Introduction
62gerente
610
210k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
The Cost Of JavaScript in 2023
addyosmani
47
7.3k
Building an army of robots
kneath
302
45k
Six Lessons from altMBA
skipperchong
27
3.6k
Gamification - CAS2011
davidbonilla
80
5.1k
Agile that works and the tools we love
rasmusluckow
328
21k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.8k
We Have a Design System, Now What?
morganepeng
51
7.4k
Transcript
静的ライブラリと 共有ライブラリの違いを 実験で確認 Dec. 28th, 2024 Satoru Takeuchi X: satoru_takeuchi
1
はじめに • 静的ライブラリと共有ライブラリの違いを実験によって確認 • 事前知識が得られる動画 ◦ 📝 コード再利用のしくみ ライブラリ •
ソースコード ◦ https://github.com/satoru-takeuchi/youtube-sample/tree/master/0083-library • やること ◦ ある関数を定義したコードから静的ライブラリ、共有ライブラリを作る ◦ プログラムから2つのライブラリをリンクした場合の違いを確認する 2
登場人物 • main-static: 静的ライブラリlibtest.aからmultiplyという関数を呼び出す • main-dynamic: 動的ライブラリlibtest.soからmultiplyを呼び出す • libtest.{a,so}: 2つの引数を掛けた値を返す関数multiplyを定義する
3 main()のコード main-static (実行ファイル) multiply()のコー ド multiply()のコード libtest.a 共有ライブラリ multiply()のコード libtest.so main()のコード main-dynamic (実行ファイル) libtest.soを動的リ ンクしているという 情報 静的ライブラリ 他のライブラリ のコード リンク時に必要な メタデータ
確認事項 1. 動的リンク状況 a. ldd main-static b. ldd main-dynamic 2.
ライブラリファイルのサイズ a. ls -l libtest* 3. 実行ファイルのサイズ a. ls -l main-* 4
ライブラリファイルを削除するとどうなる? 1. rm libtest.a libtest.so 2. ./main-static 3. ./main-dynamic 5
main()のコード main-static (実行ファイル) multiply()のコー ド multiply()のコード libtest.a 共有ライブラリ multiply()のコード libtest.so main()のコード main-dynamic (実行ファイル) libtest.soを動的リ ンクしているという 情報 静的ライブラリ 他のライブラリ のコード リンク時に必要な メタデータ
ライブラリファイルを更新するとどうなる? 1. libtest.cを編集してmultiply()の定義を変更 2. ライブラリ再作成(make libtest.a libtest.so)後にプログラム実行 3. 実行ファイル再作成(make main-static,
main-dynamic)後にプログラム実行 6 main()のコード main-static (実行ファイル) multiply()のコー ド multiply()の 新しいコード libtest.a 共有ライブラリ multiply()の 新しいコード libtest.so main()のコード main-dynamic (実行ファイル) libtestfoo.soを動的 リンクしているという 情報 静的ライブラリ 他のライブラリ のコード リンク時に必要な メタデータ
まとめ 7 静的ライブラリ 共有ライブラリ ライブラリのサイズ 小さい 大きい ライブラリをリンクした プログラムのサイズ 大きい
小さい ライブラリファイルを 削除した後にプログラムは 動作するか 動作する 動作しない ライブラリファイルを 変更した後にプログラムの 動作は変化するか しない する