我很想知道在以下两种方式(CC可以是g ++或gcc)中为gcc / g ++指定库(共享和静态)是否有任何实质性差异
CC -o output_executable /path/to/my/libstatic.a /path/to/my/libshared.so source1.cpp source2.cpp ... sourceN.cpp
VS
CC -o output_executable -L/path/to/my/libs -lstatic -lshared source1.cpp source2.cpp ... sourceN.cpp
我只能看到一个主要的区别是,直接传递完全指定的库名称可以更好地控制选择静态或动态版本,但我怀疑还有其他事情会对可执行文件的方式产生副作用是建立的还是会在运行时运行,我是对的吗?
安德烈。
答案 0 :(得分:5)
好的,我可以根据一些实验和更深入阅读gcc文档来回答自己:
来自gcc文档:http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html
[...]链接器通过扫描存档文件来处理存档文件,以查找已定义但尚未定义的符号的成员。但是,如果找到的文件是普通的目标文件,则以通常的方式链接。使用-l选项和指定文件名之间的唯一区别是-l使用
lib' and
围绕库.a'并搜索多个目录
这实际上也回答了关于在gcc命令行上直接指定目标文件的第3个选项的相关疑问(即,在这种情况下,目标文件中的所有代码将成为最终可执行文件的一部分,同时仅使用归档真正需要的目标文件将被拉入。