簡體   English   中英

與C ++靜態庫的鏈接問題

[英]Linking issue with C++ static libraries

我有2個靜態庫,正在構建1個鏈接這兩個庫的可執行文件。 直到我將Crc函數從library2移到library1為止,這段代碼才能編譯/運行良好。 在library1中,我定義了一個函數

uint16_t Crc16(const std::vector<uint8_t> &data);

在library2我有一個功能

uint16_t MyClass::CalcChecksum()
{
    std::vector<uint8_t> payload(rawData.begin()+1, rawData.end()-FOOTER_SIZE);
    return Crc16(payload);
}

當我鏈接可執行文件時,我得到的是對“ Crc16”的未定義引用。我的鏈接行是

g++ -rdynamic -Wl,-rpath,/home/chris/Qt5.3.0/5.3/gcc_64 -Wl,-rpath,/home/chris/Qt5.3.0/5.3/gcc_64/lib -o MyExecutable main.o server.o client.o service.o userserver.o pluginloader.o plugin.o moc_server.o moc_client.o moc_userserver.o moc_pluginloader.o moc_plugin.o   -L/home/chris/Dev/ProductName/build-ProductName-Desktop_Qt_5_3_0_GCC_64bit-Debug/MyExecutable/../StaticLibrary1/ -lStaticLibrary1 -L/home/chris/Dev/ProductName/build-ProductName-Desktop_Qt_5_3_0_GCC_64bit-Debug/MyExecutable/../StaticLibrary2/ -lStaticLibrary2 -ldl -L/home/chris/Qt5.3.0/5.3/gcc_64/lib -lQt5Network -lQt5Core -lpthread

當我檢查libray1的導出時,得到以下信息:

nm lib1.a | grep -i crc
000000000000041d T Crc16

和lib2我得到這個:

nm lib2.a | grep -i crc
                 U Crc16

我得到的實際錯誤是

/home/chris/Dev/ProductName/build-ProductName-Desktop_Qt_5_3_0_GCC_64bit-Debug/MyExecutable/../StaticLibrary2//libStaticLibrary2.a(message.o): In function `Device::Message::CalcChecksum()':
/home/chris/Dev/ProductName/ProductName/StaticLibrary2/message.cpp:392: undefined reference to `Crc16'

library1具有已定義的功能,而library2具有標記為undefined的功能這一事實很有意義。 沒有意義的是,當鏈接可執行文件時,它抱怨該函數未定義。

謝謝克里斯

由於library2取決於library1,因此需要在鏈接行上首先列出它。 顛倒順序,您應該一切順利。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM