我很难搞清楚在执行链接时要传递给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 $@ $^
...
问题:
-static
标志?创建静态库之后,我想将一些已编译的.o文件与其中一些库链接起来以构建可执行文件,因此我使用它:
LINKER = g++
LIB_DIR = lib/linux
SYSTEM_LIBS = -lgmp
LDFLAGS = -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 问题的答案。
答案 0 :(得分:2)
问:-Wall在这里有意义还是仅用于编译? 答:我相信这只是为了编译。 (fyi,大写字母W后面跟着你想要编辑期间所有警告的“所有”物种)
问:是否需要将任何其他“标准”标志传递给链接器,类似于为编译器推荐的那些? 答:不是我知道的。您可以在此处找到常用选项:http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html
您是否遇到了您想要粘贴的任何特定错误?