g++ test.cpp -L./ -lmylib -o test
请问,编译器是如何判断 mylib 是静态库还是动态库?是通过后缀吗?那直接改后缀可以吗?
1
jiang1234321 OP 测试了一下,直接改.a 为.so 是可以正常编译运行 test 的
|
2
lcdtyph 2019-03-30 16:00:43 +08:00 via iPhone
|
4
Gcourage 2019-03-30 16:30:48 +08:00 via Android
用 file 命令可以查看是什么文件。
g++最终会调动 ld 命令去链接的,应该 ld 工具会根据文件来做静态链接,还是动态链接。 Linux 上对文件后缀名不太敏感 |
5
jiang1234321 OP @lcdtyph 这个倒是了解一点,主要是除了后缀之外,动态库和静态库的区别是什么,为什么 file 出来的结果会不一样?
|
6
liuminghao233 2019-03-30 18:55:22 +08:00 via iPhone
csapp 705 页
|
7
PPing520 2019-03-30 19:20:28 +08:00
静态库是打包在可执行文件一起的,动态库的动态链接有多种情况:1,启动时链接,2,运行时链接,并不包含在可执行文件之中
|
8
lcdtyph 2019-03-30 19:59:25 +08:00 via iPhone
|
9
mikeguan 2019-03-30 21:41:36 +08:00 via Android
Linux 是根据魔数确定文件类型的,一般情况下和后缀没关系。
|