静态链接库时未定义对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; 
} 

我在我束手无策,我不知道该怎么办。我会感谢任何帮助。

+0

什么是g ++标志? – Alex

+0

看起来像是在混合ABI不兼容代码 – OMGtechy

+0

@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

它看起来像你的链接器选项是不正确的:

../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