0
我有2个静态库,并且我构建了一个链接这两个库的可执行文件。此代码编译/运行良好,直到我将Crc函数从library2移至library1。在LIBRARY1我已经定义了一个函数与C++静态库链接问题
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具有的功能标记为未定义有意义的事实。没有任何意义的是,当链接一个可执行文件时,它会抱怨函数未定义。
谢谢, 克里斯
Brillant!太糟糕了,我没有想到这一点!感谢帮助。 – Chris