【问题标题】:Undefined reference to std::*something* when linking library staticly静态链接库时对 std::*something* 的未定义引用
【发布时间】:2017-03-27 11:59:52
【问题描述】:

我已经将我的一些代码编译到一个静态库中。该库中的所有内容都以 Glow 或 GLOWE 前缀开头。目前,我正在 Linux (Ubuntu 14.04) 中测试该库。我做了一个简单的程序来检查我是否做的一切正确。

#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;
}

我束手无策,不知道该怎么办。我将不胜感激。

【问题讨论】:

  • 什么是 g++ 标志?
  • 看起来你在混合 ABI 不兼容的代码
  • @Alex 标志是:g++ -Wall -std=c++14 -g -std=c++14 -DGLIBCXX_USE_CXX11_ABI=0 -I../GlowE -c /home/thereclif/Pulpit /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

标签: c++ linux c++11 g++ c++14


【解决方案1】:

您的链接器选项似乎不正确:

../GlowE/GlowEngine/bin/Debug/libGlowEngine.a /usr/lib/x86_64-linux-gnu/libzip.a /usr/lib/x86_64-linux-gnu/libz.a

试试:

-l../GlowE/GlowEngine/bin/Debug/GlowEngine -l/usr/lib/x86_64-linux-gnu/zip -l/usr/lib/x86_64-linux-gnu/z

【讨论】:

  • 我检查了它是否适合我。不幸的是,它没有,但它让我查看了我的构建日志。原来我用 -m32 编译了我的库,但是我没有用相同的选项编译我的程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多