相关疑难解决方法(0)

429
推荐指数
8
解决办法
17万
查看次数

为什么"未定义引用`boost :: system :: generic_category"即使我链接到boost_system

如果我没有放置-lboost_system标志,我会理解这个错误信息,但它确实在这里:

g++ -o build/myproject build/main/main.o -L/usr/local/boost/boost_1_52_0/boost/libs -L/usr/lib -Lbuild -L. -lboost_system -lboost_thread -lpthread -lboost_regex -lpq -lmylibrary
build/libmylibrary.a(library.o): In function `__static_initialization_and_destruction_0(int, int)':
library.cpp:(.text+0x25f): undefined reference to `boost::system::generic_category()'
library.cpp:(.text+0x269): undefined reference to `boost::system::generic_category()'
library.cpp:(.text+0x273): undefined reference to `boost::system::system_category()'

你知道我应该调查什么来解决这个问题吗?(我使用gcc 4.6.3)

linker gcc boost

17
推荐指数
1
解决办法
2万
查看次数

是否有解决未定义参考/未解决符号问题的一般准则?

我有几个"未定义的引用"(在链接期间)和"未解析的符号"(在dlopen之后的运行时)我工作的问题.它是一个相当大的makefile系统.

是否有一般规则和指南来链接库和使用编译器标志/选项来规避这些类型的错误?

c++ symbols reference undefined

6
推荐指数
2
解决办法
6494
查看次数

链接对象和静态库

我很难确定执行链接时要传递给g ++的标志。基本上,我用这些“标准”标志编译一些代码:

CXXFLAGS = -Wall -Wextra -Wconversion -pedantic -std=c++0x -O2
Run Code Online (Sandbox Code Playgroud)

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

libxxx.a: xxx1.o xxx2.o ...
    ar rcs $@ $^
libyyy.a: yyy1.o yyy2.o ...
    ar rcs $@ $^
...
Run Code Online (Sandbox Code Playgroud)

问题:

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

创建静态库之后,我想将一些已编译的.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 $@
Run Code Online (Sandbox Code Playgroud)

问题:

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

另外,在链接期间,它为我提供了有关GMP库中未定义引用的例外。据我所知,-lgmp发送到链接器并安装在系统上(我能够通过命令行使用GMP编译一个简单的hello世界),而libxxx.a libyyy.a libzzz.a是位于$(LIB_DIR)中。也许我应该提到libxxx.a中使用了GMP符号。


更新

我设法修复了GMP符号的未定义引用。问题是由我放置库的顺序引起的。基本上,按规定 …

c++ linker makefile g++ gmp

5
推荐指数
1
解决办法
1256
查看次数

标签 统计

linker ×3

c++ ×2

gcc ×2

boost ×1

g++ ×1

gmp ×1

makefile ×1

reference ×1

symbols ×1

undefined ×1