[GNU/Linux]动态库的生成和使用

使用g++命令来生成动态库
编译,生成.o文件 (编译选项 ‐fPIC )
g++ ‐c ‐fPIC example.cpp ‐o example.o
链接,生成目标 .so文件 ( 链接选项 ‐shared)
g++ ‐shared example.o ‐o libexample.so
(PIC:Position Independent Code位置无关代码)

使用nm命令查看库中的符号
nm  libexample.so

 

编译:
g++  ‐c main.cpp ‐o main.o
链接:
g++ main.o ‐o helloworld ‐L. ‐lexample
链接选项:
‐lexample  使用libexample.so这个库文件
‐L.  指定库文件的位置

 

拿到一个可执行程序,怎么知道它依赖哪些库呢?
readelf ‐d helloworld
Tag        Type                         Name/Value
0x00000001 (NEEDED)                     Shared library:
[libexample.so]
0x00000001 (NEEDED)                     Shared library:
[libstdc++.so.6]
0x00000001 (NEEDED)                     Shared library: [libm.so.6]
0x00000001 (NEEDED)                     Shared library:
[libgcc_s.so.1]
0x00000001 (NEEDED)                     Shared library: [libc.so.6]

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注