c++ - Static library linking failure -
c++ - Static library linking failure -
my os windows 7 ultimate, x64. compiled library (https://github.com/mfontanini/libtins) cmake, visual studio 12.0. output tins.lib. dependencies: winpcap, ihplpapi.lib , ws2_32.lib. winpcap seemed work alone, got includes @ c:\libtins\include, , .lib files in c:\libtins except winpcap. main.cpp source taken library-example. unable understand what's problem, seems fails read functions. compiler next source qt creator.
why library fail link qt creator? moreover, what's solution error fixed?
qt project file this:
qt += core qt -= gui target = libtins_test config += console config -= app_bundle template = app sources += main.cpp includepath += c:/wpdpack/include includepath += c:/libtins/include libs += -lc:/wpdpack/lib/x64 -lwpcap -lpacket libs += -lc:/libtins -lws2_32 -liphlpapi -ltins main.cpp this:
#include <tins/tins.h> #include <map> #include <iostream> #include <functional> #include <qcoreapplication> using namespace tins; class arp_monitor { public: void run(sniffer &sniffer); private: bool callback(const pdu &pdu); std::map<ipv4address, hwaddress<6>> addresses; }; void arp_monitor::run(sniffer &sniffer) { sniffer.sniff_loop( std::bind( &arp_monitor::callback, this, std::placeholders::_1 ) ); } bool arp_monitor::callback(const pdu &pdu) { // retrieve arp layer const arp &arp = pdu.rfind_pdu<arp>(); // arp reply? if(arp.opcode() == arp::reply) { // let's check if there's entry address auto iter = addresses.find(arp.sender_ip_addr()); if(iter == addresses.end()) { // haven't seen address. save it. addresses.insert({ arp.sender_ip_addr(), arp.sender_hw_addr()}); std::cout << "[info] " << arp.sender_ip_addr() << " @ " << arp.sender_hw_addr() << std::endl; } else { // we've seen address. if it's not same hw address, inform if(arp.sender_hw_addr() != iter->second) { std::cout << "[warning] " << arp.sender_ip_addr() << " @ " << iter->second << " @ " << arp.sender_hw_addr() << std::endl; } } } homecoming true; } int main(int argc, char *argv[]) { qcoreapplication a(argc, argv); /* if(argc != 2) { std::cout << "usage: " << *argv << " <interface>\n"; homecoming 1; }*/ arp_monitor monitor; // sniffer configuration snifferconfiguration config; config.set_promisc_mode(true); config.set_filter("arp"); // sniff on provided interface in promiscuous mode sniffer sniffer("eth0", config); // capture arp packets monitor.run(sniffer); homecoming a.exec(); } compile output (qt creator):
03:13:11: running steps project libtins_test... 03:13:11: configuration unchanged, skipping qmake step. 03:13:11: starting: "c:\qt\tools\qtcreator\bin\jom.exe" c:\qt\tools\qtcreator\bin\jom.exe -f makefile.debug echo 1 /* createprocess_manifest_resource_id */ 24 /* rt_manifest */ "debug\\libtins_test.exe.embed.manifest">debug\libtins_test.exe_manifest.rc if not exist debug\libtins_test.exe if exist debug\libtins_test.exe.embed.manifest del debug\libtins_test.exe.embed.manifest if exist debug\libtins_test.exe.embed.manifest re-create /y debug\libtins_test.exe.embed.manifest debug\libtins_test.exe_manifest.bak link /nologo /dynamicbase /nxcompat /debug /subsystem:console "/manifestdependency:type='win32' name='microsoft.windows.common-controls' version='6.0.0.0' publickeytoken='6595b64144ccf1df' language='*' processorarchitecture='*'" /manifest /manifestfile:debug\libtins_test.exe.embed.manifest /out:debug\libtins_test.exe @c:\users\burny1\appdata\local\temp\libtins_test.exe.3536.47.jom main.obj : error lnk2019: unresolved external symbol "public: __cdecl tins::ipv4address::ipv4address(unsigned int)" (??0ipv4address@tins@@qeaa@i@z) referenced in function "public: class tins::ipv4address __cdecl tins::arp::sender_ip_addr(void)const " (? sender_ip_addr@arp@tins@@qeba?avipv4address@2@xz) main.obj : error lnk2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl tins::operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class tins::ipv4address const &)" (??6tins@@yaaeav?$basic_ostream@du? $char_traits@d@std@@@std@@aeav12@aebvipv4address@0@@z) referenced in function "private: bool __cdecl arp_monitor::callback(class tins::pdu const &)" (?callback@arp_monitor@@aeaa_naebvpdu@tins@@@z) main.obj : error lnk2019: unresolved external symbol "public: virtual __cdecl tins::basesniffer::~basesniffer(void)" (??1basesniffer@tins@@ueaa@xz) referenced in function "public: virtual __cdecl tins::sniffer::~sniffer(void)" (??1sniffer@tins@@ueaa@xz) main.obj : error lnk2019: unresolved external symbol "public: class tins::packetwrapper<class tins::pdu *,class tins::timestamp> __cdecl tins::basesniffer::next_packet(void)" (? next_packet@basesniffer@tins@@qeaa?av?$packetwrapper@peavpdu@tins@@vtimestamp@2@@2@xz) referenced in function "private: void __cdecl tins::snifferiterator::advance(void)" (? advance@snifferiterator@tins@@aeaaxxz) main.obj : error lnk2019: unresolved external symbol "public: class tins::snifferiterator __cdecl tins::basesniffer::begin(void)" (?begin@basesniffer@tins@@qeaa?avsnifferiterator@2@xz) referenced in function "public: void __cdecl tins::basesniffer::sniff_loop<class std::_bind<1,bool,struct std::_pmf_wrap<bool (__cdecl arp_monitor::*)(class tins::pdu const &),bool,class arp_monitor,class tins::pdu const &>,class arp_monitor * const,class std::_ph<1> &> >(class std::_bind<1,bool,struct std::_pmf_wrap<bool (__cdecl arp_monitor::*)(class tins::pdu const &),bool,class arp_monitor,class tins::pdu const &>,class arp_monitor * const,class std::_ph<1> &>,unsigned int)" (??$sniff_loop@v? $_bind@$00_nu?$_pmf_wrap@p8arp_monitor@@eaa_naebvpdu@tins@@@z_nv1@aebv23@@std@@qeavarp_monitor@@aeav? $_ph@$00@2@@std@@@basesniffer@tins@@qeaaxv?$_bind@$00_nu? $_pmf_wrap@p8arp_monitor@@eaa_naebvpdu@tins@@@z_nv1@aebv23@@std@@qeavarp_monitor@@aeav? $_ph@$00@2@@std@@i@z) main.obj : error lnk2019: unresolved external symbol "public: class tins::snifferiterator __cdecl tins::basesniffer::end(void)" (?end@basesniffer@tins@@qeaa?avsnifferiterator@2@xz) referenced in function "public: void __cdecl tins::basesniffer::sniff_loop<class std::_bind<1,bool,struct std::_pmf_wrap<bool (__cdecl arp_monitor::*)(class tins::pdu const &),bool,class arp_monitor,class tins::pdu const &>,class arp_monitor * const,class std::_ph<1> &> >(class std::_bind<1,bool,struct std::_pmf_wrap<bool (__cdecl arp_monitor::*)(class tins::pdu const &),bool,class arp_monitor,class tins::pdu const &>,class arp_monitor * const,class std::_ph<1> &>,unsigned int)" (??$sniff_loop@v? $_bind@$00_nu?$_pmf_wrap@p8arp_monitor@@eaa_naebvpdu@tins@@@z_nv1@aebv23@@std@@qeavarp_monitor@@aeav? $_ph@$00@2@@std@@@basesniffer@tins@@qeaaxv?$_bind@$00_nu? $_pmf_wrap@p8arp_monitor@@eaa_naebvpdu@tins@@@z_nv1@aebv23@@std@@qeavarp_monitor@@aeav? $_ph@$00@2@@std@@i@z) main.obj : error lnk2019: unresolved external symbol "public: __cdecl tins::sniffer::sniffer(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class tins::snifferconfiguration const &)" (??0sniffer@tins@@qeaa@aebv?$basic_string@du?$char_traits@d@std@@v?$allocator@d@2@@std@@aebvsnifferconfiguration@1@@z) referenced in function main main.obj : error lnk2019: unresolved external symbol "public: __cdecl tins::snifferconfiguration::snifferconfiguration(void)" (??0snifferconfiguration@tins@@qeaa@xz) referenced in function main main.obj : error lnk2019: unresolved external symbol "public: void __cdecl tins::snifferconfiguration::set_promisc_mode(bool)" (? set_promisc_mode@snifferconfiguration@tins@@qeaax_n@z) referenced in function main main.obj : error lnk2019: unresolved external symbol "public: void __cdecl tins::snifferconfiguration::set_filter(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (? set_filter@snifferconfiguration@tins@@qeaaxaebv?$basic_string@du?$char_traits@d@std@@v? $allocator@d@2@@std@@@z) referenced in function main debug\libtins_test.exe : fatal error lnk1120: 10 unresolved externals jom: c:\qt\tools\qtcreator\bin\build-libtins_test-desktop_qt_5_3_msvc2013_64bit-debug\makefile.debug [debug\libtins_test.exe] error 1120 jom: c:\qt\tools\qtcreator\bin\build-libtins_test-desktop_qt_5_3_msvc2013_64bit-debug\makefile [debug] error 2 03:13:12: process "c:\qt\tools\qtcreator\bin\jom.exe" exited code 2. error while building/deploying project libtins_test (kit: desktop qt 5.3 msvc2013 64bit) when executing step "make" 03:13:12: elapsed time: 00:01.
including libraries using -l , -l notations has never worked me using msvc compiler. have no thought why though. seek including libraries total paths including extensions. ex.
libs += c:/wpdpack/lib/x64/wpcap.lib \ c:/wpdpack/lib/x64/packet.lib \ c:/libtins/ws2_32.lib \ c:/libtins/iphlpapi.lib \ c:/libtins/tins.lib even order in include these libraries matter in case of msvc. if 1 library dependent on other library, top level library has on top. i.e. if a.lib dependent on b.lib, have add together first followed b.
c++ windows qt qt-creator
Comments
Post a Comment