静态链接库时未定义对std :: * something *的引用
问题描述:
我已将一些代码编译到静态库中。该库中的所有内容都以Glow或GLOWE前缀开头。目前,我正在Linux中测试这个库(Ubuntu 14.04)。我做了一个简单的程序来检查我是否正确地做了一切。静态链接库时未定义对std :: * something *的引用
#include <GlowSystem/Package.h>
int main(void)
{
GLOWE::Package package;
return 0;
}
GLOWE :: Package是一个类。它使用libzip和zlib(和标准C++文件,例如字符串)。我链接libzip和zlib。当我尝试编译时,它会失败并出现一些链接错误。 Build log (at pastebin)
我认为,这些错误是由于太旧造成的libstdC++,但是这个代码编译:
#include <string>
using namespace std;
int main(void)
{
string a;
a.resize(5000);
return 0;
}
我在我束手无策,我不知道该怎么办。我会感谢任何帮助。
答
它看起来像你的链接器选项是不正确的:
../GlowE/GlowEngine/bin/Debug/libGlowEngine.a /usr/lib/x86_64-linux-gnu/libzip.a /usr/lib/x86_64-linux-gnu/libz.a
尝试:
-l ../格洛韦/ GlowEngine /斌/调试/ GlowEngine -l/usr/lib目录/ x86_64的Linux的-gnu/zip -l/usr/lib/x86_64-linux-gnu/z
+0
我检查了它是否适用于我。不幸的是,它没有,但它让我看看我的构建日志。事实证明我用-m32编译了我的库,但是我没有用相同的选项编译我的程序。 – TheReclif
什么是g ++标志? – Alex
看起来像是在混合ABI不兼容代码 – OMGtechy
@Alex标志是:g ++ -Wall -std = C++ 14 -g -std = C++ 14 -DGLIBCXX_USE_CXX11_ABI = 0 -I ../ GlowE -c/home//clip/Turpit/GlowTest/main.cpp -o obj/Debug/main.o g ++ -o bin/Debug/GlowTest obj/Debug/main.o -lzip -lz -lstdC++ ../GlowE/GlowEngine/bin/Debug /libGlowEngine.a /usr/lib/x86_64-linux-gnu/libzip.a /usr/lib/x86_64-linux-gnu/libz.a – TheReclif