2017-03-27 63 views
0

我已將一些代碼編譯到靜態庫中。該庫中的所有內容都以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

回答

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

相關問題