c – 链接对象和静态库

c – 链接对象和静态库,第1张

概述我很难搞清楚在执行链接时要传递给g的标志.基本上,我使用这些“标准”标志编译一些代码: CXXFLAGS = -Wall -Wextra -Wconversion -pedantic -std=c++0x -O2 然后,我将生成的.o文件合并到几个静态库中,如下所示: libxxx.a: xxx1.o xxx2.o ... ar rcs $@ $^libyyy.a: yyy1.o yyy 我很难搞清楚在执行链接时要传递给g的标志.基本上,我使用这些“标准”标志编译一些代码:

CXXFLAGS = -Wall -Wextra -Wconversion -pedantic -std=c++0x -O2

然后,我将生成的.o文件合并到几个静态库中,如下所示:

libxxx.a: xxx1.o xxx2.o ...    ar rcs $@ $^libyyy.a: yyy1.o yyy2.o ...    ar rcs $@ $^...

问题:

>编译.o文件时,是否需要在CXXFLAGS中使用-static标志?

在创建静态库之后,我想将一些已编译的.o文件与其中一些库链接起来以构建可执行文件,因此我使用它:

linkER = g++liB_DIR = lib/linuxSYstem_liBS = -lgmpLDFLAGS = -Wall -L $(OUTPUT_DIR) -L $(liB_DIR) $(SYstem_liBS)$(linkER) $^ $(LDFLAGS) -lsvm -lUtils -lKinderedSpirits -o $@exe:    $(linkER) o1.o o2.o $(LDFLAGS) -lxxx -lyyy -lzzz -o $@

问题:

– 我应该在这里使用-static标志吗?
– -Wall在这里有意义还是仅用于编译?
– 是否有任何其他需要传递给链接器的“标准”标志,类似于编译器推荐的标志?

此外,在链接期间,它给出了关于来自GMP库的未定义引用的例外.据我所知,-lgmp被发送到链接器并且它被安装在系统上(我能够编译一个简单的hello world,它从命令行使用GMP)和libxxx.a libyyy.a libzzz.a是位于$(liB_DIR).也许我应该提到在libxxx.a中使用GMP符号.

更新:

我设法修复了GMP符号的未定义引用.问题是由我放置库的顺序引起的.基本上,如指定的here,我需要在-lgmp之前引用依赖于GMP的库.无论如何,我仍在寻找上述3个问题的答案.

解决方法 问:我还应该在这里使用-static标志吗?
答:可能没必要.这个标志只是不可能在动态库中意外链接.

问:-Wall在这里有意义还是仅用于编译?
答:我相信这只是为了编译. (fyi,大写字母W后面跟着你想要编辑期间所有警告的“所有”物种)

问:是否需要将任何其他“标准”标志传递给链接器,类似于编译器推荐的标志?
答:不是我知道的.您可以在这里找到常用选项:http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

您是否遇到了任何您想要粘贴的特定错​​误?

总结

以上是内存溢出为你收集整理的c – 链接对象和静态库全部内容,希望文章能够帮你解决c – 链接对象和静态库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230325.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存