代码之家  ›  专栏  ›  技术社区  ›  abigagli

向gcc/g指定库的不同方法++

  •  5
  • abigagli  · 技术社区  · 15 年前

    我很想知道在用以下两种方式(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
    

    我只能看到一个主要的区别,直接传递完全指定的库名称将在选择静态或动态版本时提供更大的控制,但我怀疑还有其他一些事情可能会对可执行文件的构建方式或运行时的行为产生副作用,我说的对吗?

    安德列。

    1 回复  |  直到 15 年前
        1
  •  5
  •   abigagli    15 年前

    好吧,我可以根据一些实验和对gcc文档的深入阅读来回答自己:

    从GCC文件: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

    […]链接器通过扫描存档文件来处理其成员,这些成员定义了迄今为止已被引用但尚未定义的符号。但是,如果找到的文件是一个普通的对象文件,它将以通常的方式链接。使用-l选项和指定文件名之间的唯一区别是-l用 lib' and .A'并搜索多个目录

    这实际上也回答了关于在gcc命令行直接指定对象文件的第三个选项的相关疑问(即在这种情况下,对象文件中的所有代码都将成为最终可执行文件的一部分,而使用归档文件时,只有真正需要的对象文件才是p沉浸在)