1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
778
778
EMPFEHLEN
-
Moin zusammen,
ich versuche seit gestern, mein Projekt auf Windows zu portieren, scheitere aber nach wie vor am linken einiger Bibliotheken. Konkret brauche ich folgende libs: boost_system, boost_filesystem, curllib und crypto++.
Daher habe ich in einem Unterordner meines Projekt folgende Dateien:
Die Boost-Dateien habe ich mithilfe von http://www.boostpro.com/ dorthin gepackt.boost_filesystem-vc90-mt-1_42.dll
boost_filesystem-vc90-mt-1_42.lib
boost_filesystem-vc90-mt-gd-1_42.dll
boost_filesystem-vc90-mt-gd-1_42.lib
boost_system-vc90-mt-1_42.dll
boost_system-vc90-mt-1_42.lib
boost_system-vc90-mt-gd-1_42.dll
boost_system-vc90-mt-gd-1_42.lib
cryptlib.lib
curllib.lib
libboost_filesystem-vc90-mt-1_42.lib
libboost_filesystem-vc90-mt-gd-1_42.lib
libboost_filesystem-vc90-mt-s-1_42.lib
libboost_filesystem-vc90-mt-sgd-1_42.lib
libboost_filesystem-vc90-s-1_42.lib
libboost_filesystem-vc90-sgd-1_42.lib
libboost_system-vc90-mt-1_42.lib
libboost_system-vc90-mt-gd-1_42.lib
libboost_system-vc90-mt-s-1_42.lib
libboost_system-vc90-mt-sgd-1_42.lib
libboost_system-vc90-s-1_42.lib
libboost_system-vc90-sgd-1_42.lib
Ich verwende das VS 2008 Professional. Darin habe ich unter Project/Configuration Properites/Linker/General bei Additional Library Directories das Verzeichnis angegeben, das die oben genannten Dateien enthält.
Dann treten einige Probleme auf:
Dies ist nur ein kleiner Ausschnitt. Wenn ich nun die lib cryptlib.lib explizit unter Project/Configuration Properites/Linker/Input bei Additional Dependencies angebe, so scheint die lib soweit in Ordnung. Nun habe ich z. B. folgende Meldung:Code :1 2
main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::Filter::Initialize(class CryptoPP::NameValuePairs const &,int)" (?Initialize@Filter@CryptoPP@@UAEXABVNameValuePairs@2@H@Z) main.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall CryptoPP::Filter::Flush(bool,int,bool)" (?Flush@Filter@CryptoPP@@UAE_N_NH0@Z)
Nun tritt z. B. folgendes auf:Code :1 2
error LNK2019: unresolved external symbol __imp__curl_easy_cleanup referenced in function "bool __cdecl updateFile(class std::basic_string,class std::allocator Daher das selbe Spiel mit[B] libcurl.lib[/B] wie zuvor mit cryptlib.lib.
Daher trage ich unter Project/Configuration Properites/Linker/Input bei Ignore Specific Library libcmtd.lib ein, wie bei http://support.microsoft.com/kb/148652 beschrieben. Danach tritt beispielhaftLIBCMTD.lib(invarg.obj) : error LNK2005: __invalid_parameter already defined in MSVCRTD.lib(MSVCR90D.dll)
auf. Daher füge ich diese zu den ignorierten libs hinzu. Das resultiert z. B. inCode :1 2 3 4 5
msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: class std::basic_string,class std::allocator > & __thiscall std::basic_string,class std::allocator >::operator+=(char const *)" (Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z) already defined in cryptlib.lib(filters.obj) ... libcpmtd.lib(locale0.obj) : error LNK2005: "public: class std::basic_string,class std::allocator > & __thiscall std::basic_string,class std::allocator >::operator=(char const *)" (4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z) already defined in msvcprtd.lib(MSVCP90D.dll)
Soweit bin ich nun und eine Lösung scheint nicht in Sicht (obgleich ich zugeben muss, von Linken nicht viel Ahnung zu haben). Wenn mir irgendjemand weiterhelfen kann, oder auch nur meint, es zu können, ich bin für jeden Tipp dankbar.Code :1 2
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class std::basic_string,class std::allocator > & __thiscall std::basic_string,class std::allocator >::operator+=(char)" (__imp_Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z) referenced in function "public: class std::basic_string,class std::allocator > const __thiscall boost::filesystem::basic_path,class std::allocator >,struct boost::filesystem::path_traits>::file_string(void)const " (?file_string@?$basic_path@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Upath_traits@filesystem@boost@@@filesystem@boost@@QBE?BV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) libboost_filesystem-vc90-mt-gd-1_42.lib(operations.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class std::basic_string,class std::allocator > & __thiscall std::basic_string,class std::allocator >::operator+=(char)" (__imp_Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z)
Soweit mein bisher wohl längster Threaed
Vielen Dank.
Gruß,
badday
-
17.05.10 18:46 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Du verwendest gleichzeitig die statische und dynamische Microsoft Runtime Bibliothek.
Das ist nicht möglich.
Du mußt dein Projekt auf die MSVC Runtime stellen, die von allen Bibliotheken unterstützt wird.
Die Boost Bibliotheken sind dabei kein Problem, denn von diesen gibt es die Bibliotheken in jeglicher Ausprägung und schließlich werden diese auch automatisch gelinkt.
Wo hast du die libcurl bzw. crypto++ Bibliotheken her? Hast du die selbst erstellt?
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
OK, also crypto++ habe ich selbst erstellt, mit /MTd. Libcurl habe ich nicht selbst erstellt. Kompiliere ich nun das Projekt mit /MTd, so funktioniert das zunächst (er kompiliert es, beschwert sich allerdings danach, dass die curllib.dll fehle. Wo genau muss ich die hinpacken?
Oder kann ich den Pfad irgendwo angeben? Bzw. kann ich vermeiden, dass er auf die dll zurückgreift, indem ich statisch linke?
Gruß,
baddayGeändert von badday (17.05.10 um 20:00 Uhr)
-
17.05.10 20:38 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Siehe http://msdn.microsoft.com/en-us/libr...86(VS.85).aspx
Ja, natürlich. Du mußt nur eine statische Version der Bibliothek erstellen. (vorausgesetzt das ist von der Bibliothek auch so vorgesehen, manche Bibliotheken haben besonderen Initialisierungscode der in der DllMain ausgeführt werden muss...)
GrußGeändert von deepthroat (17.05.10 um 20:43 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Ich habe leider immer noch ein Problem mit libcurl. Ich habe hier noch einmal geschaut: http://curl.haxx.se/docs/faq.html#Li...uilding_libcur und die lib selber gebaut - erfolgreich. Nun ist aber immer noch das Problem, dass, wenn ich das ganze kompiliere, es nach wie vor "unresolved external symbols" gibt, wie z. B. _imp_curl_easy_cleanup.
Ich habe libcurld.lib vorliegen und linke sie auch, aber offenbar sind diese Symbole dort nun enthalten.
Weiß jemand weiter?
Danke.
Gruß,
badday
-
18.05.10 15:58 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Ja, ich hatte das DCURL_STATICLIB Makro in beiden definiert.
OK, nun scheint es zu funktionieren. Nach diesem Tipp: http://social.msdn.microsoft.com/For...a-cb042a4de83c.
Danke auch an deepthroat, für seine Geduld und seine guten Tipps.
Gruß,
baddayGeändert von badday (18.05.10 um 16:13 Uhr)
-
18.05.10 16:15 #8
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Funktioniert aber mit DCURL_STATICLIB, aber mag sein, dass du recht hast.
Gruß,
badday
Ähnliche Themen
-
libnoise + noiseutils -> Linkerprobleme
Von badday im Forum C/C++Antworten: 4Letzter Beitrag: 29.08.10, 13:49





Zitieren

Login






