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

发布于 2024-08-27 07:30:45 字数 449 浏览 6 评论 0原文

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

CC -o output_executable -L/path/to/my/libs -lstatic -lshared source1.cpp source2.cpp ... sourceN.cpp

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

安德里亚.

I'd be curious to understand if there's any substantial difference in specifying libraries (both shared and static) to gcc/g++ in the two following ways (CC can be g++ or gcc)

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

I can only see a major difference being that passing directly the fully-specified library name would make for a greater control in choosing static or dynamic versions, but I suspect there's something else going on that can have side effects on how the executable is built or will behave at runtime, am I right?

Andrea.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时光病人 2024-09-03 07:30:45

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

来自 gcc 文档: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

[...] 链接器通过扫描归档文件以查找定义迄今为止已引用但尚未定义的符号的成员来处理归档文件。但如果找到的文件是普通目标文件,则以通常的方式链接它。使用 -l 选项和指定文件名之间的唯一区别是 -l 用 lib' 和.a' 包围库并搜索多个目录

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

Ok, I can answer myself basing on some experiments and a deeper reading of gcc documentation:

From gcc documentation: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

[...] The linker handles an archive file by scanning through it for members which define symbols that have so far been referenced but not defined. But if the file that is found is an ordinary object file, it is linked in the usual fashion. The only difference between using an -l option and specifying a file name is that -l surrounds library with lib' and.a' and searches several directories

This actually answers also to the related doubt about the 3rd option of directly specifying object files on the gcc command line (i.e. in that case all the code in the object files will become part of the final executable, while using archives, only the object files that are really needed will be pulled in).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文