H
Hallo,
Ich bin neu hier und auch ziemlich neu mit C++ unterwegs. Ich hoffe es ist keine dumme frage..
Also ich benutze Visual Studio 2013 und möchte ein open source Projekt ( SUMO ) um eine Funktion erweitern, nämlich json daten per http versenden.
Das Projekt habe ich in Visual Studio geladen und auch erfolgreich gebaut.
Nun dann habe ich eins der Projekte erweitert und mittels nuget das Microsoft package Casablanca dazugeladen... Ich habe eine Headerdatei und eine Code datei für meinen Code geschrieben und es baut auch. Allerdings bekam ich dann mehrere Linker Errors bezüglich des Casablanca Projekts. Diese habe ich beseitigen können indem ich #pragma comment(lib, "cpprest120_2_0.lib") in mein code eingefügt habe...
Dann ging es jedoch weiter, dass plötzlich nun auch LNK error in Bezug auf xerces kamen. Das war vorher schon im Projekt und wurde ja schon erfolgreich gebaut und aufgelöst. Nunja Xerces auch hinzugefügt... und dann gehts weiter nun haben sich die LNK errors auch auf andere Projekte ausgeweitet an denen ich nichts geändert habe und die vorher ja erfolgreich gebaut haben. Also sind die Definitionen ja definitiv schon gefunden worden. Außerdem wird in meinem Projekt gemeckert dass z.B. std:basic_string nicht aufgelöst werden kann . Das sollte ja eigentlich standard bibliothek sein. Auch in anderen Projekten werden wohl einige Standardsachen plötzlich nicht mehr gefunden soweit ich das sehe. z.B. #include <sys/socket.h>
Ich verstehe nun nicht ganz wie ich das hinbekommen habe es so zu zermurksen. Ich habe mich etwas in C++ eingelesen und eigentlich sind die Linker fehler ja nur dass die Implementationen nicht gefunden werden können. Bei meinem hinzugefügten Projekt ok, aber wieso kommen dann immer mehr danach dazu? Vorallem da ja die Sachen auf jedenfall da sind bzw. es wurde ja schonmal erfolgreich gebaut und aufgelöst ...
Evtl mache ich ja einen ganz blöden Fehler der zwar beim kompilieren nicht auffällt aber sich halt im Linker Fehler wiederspiegelt??
Hier mal mein Code für den Header :
#ifndef connect_h
#define connect_h
#include <utils/common/SUMOTime.h>
namespace jsonc
{
class connect
{
public:
static void write(SUMOTime timestep);
private:
static std::wstring convert(const std::string& as);
};
}
#endif
Und hier meine cpp datei :
#include "jsonconnect.h"
#include <cpprest/http_client.h>
#include <cpprest/json.h>
#pragma comment(lib, "cpprest120_2_0.lib")
#pragma comment(lib, "C:/xerces-c-3.1.1-x86-windows-vc-10.0/lib/xerces-c_3.lib")
using namespace web;
using namespace web::http;
using namespace web::http::client;
#include <microsim/MSEdge.h>
#include <microsim/MSLane.h>
#include <microsim/MSNet.h>
#include <microsim/MSVehicle.h>
#include <utils/options/OptionsCont.h>
#include <utils/geom/GeoConvHelper.h>
#include <Windows.h>
namespace jsonc
{
void connect::write(SUMOTime timestep)
{
const bool signals = OptionsCont::getOptions().getBool("fcd-output.signals");
MSVehicleControl& vc = MSNet::getInstance()->getVehicleControl();
MSVehicleControl::constVehIt it = vc.loadedVehBegin();
MSVehicleControl::constVehIt end = vc.loadedVehEnd();
json::value vehicles;
json::value timestamp;
timestamp[L"timestamp"] = json::value::string(convert(time2string(timestep)));
vehicles[0] = timestamp;
for (; it != end; ++it) {
const MSVehicle* veh = static_cast<const MSVehicle*>((*it).second);
if (veh->isOnRoad()) {
Position pos = veh->getPosition();
MSLane* lane = veh->getLane();
GeoConvHelper::getFinal().cartesian2geo(pos);
json::value vehicle;
vehicle[L"id"] = json::value::string(convert(veh->getID()));
vehicle[L"x"] = json::value::number(pos.x());
vehicle[L"y"] = json::value::number(pos.y());
vehicle[L"angle"] = json::value::number(veh->getAngle());
vehicle[L"speed"] = json::value::number(veh->getSpeed());
vehicle[L"pos"] = json::value::number(veh->getPositionOnLane());
vehicle[L"slope"] = json::value::number(lane->getShape().slopeDegreeAtOffset(veh->getPositionOnLane()));
vehicle[L"lane"] = json::value::string(convert(lane->getID()));
vehicle[L"type"] = json::value::string(convert(veh->getVehicleType().getID()));
vehicles[1] = vehicle;
//of.setPrecision(GEO_OUTPUT_ACCURACY);
if (signals) {
//of.writeAttr("signals", toString(veh->getSignals()));
}
}
http_client client(L"http://localhost:5140/");
client.request(methods::POST, L"", vehicles.to_string().c_str(),
L"application/json").then([](http_response response)
{
std::wcout << response.status_code() << std::endl;
if (response.status_code() == status_codes::OK)
{
auto body = response.extract_string();
}
});
}
}
std::wstring convert(const std::string& as)
{
// deal with trivial case of empty string
if (as.empty()) return std::wstring();
// determine required length of new string
size_t reqLength = ::MultiByteToWideChar(CP_UTF8, 0, as.c_str(), (int)as.length(), 0, 0);
// construct new string of required length
std::wstring ret(reqLength, L'\0');
// convert old string to new string
::MultiByteToWideChar(CP_UTF8, 0, as.c_str(), (int)as.length(), &ret[0], (int)ret.length());
// return new string ( compiler should optimize this away )
return ret;
}
}
Wäre super wenn mir jemand helfen kann sitze jetzt hier schon den ganzen Tag dran
Ups hier noch die Fehler :
Fehler 32 error LNK1120: 31 nicht aufgelöste Externe C:\sumo-0.20.0\build\msvc11\sumo\Release\sumo.exe 1 1 sumo
Fehler 1 error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: class pplx::task<class web::http::http_response> __thiscall web::http::client::http_client::request(class web::http::http_request,class pplx::cancellation_token)" (__imp_?request@http_client@client@http@web@@QAE?AV?$task@Vhttp_response@http@web@@@pplx@@Vhttp_request@34@Vcancellation_token@6@@Z)". C:\sumo-0.20.0\build\msvc11\sumo\z_libmicrosim_output.lib(jsonconnect.obj) sumo
Fehler 2 error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) class std::shared_ptr<struct pplx::scheduler_interface> __cdecl pplx::get_ambient_scheduler(void)" (__imp_?get_ambient_scheduler@pplx@@YA?AV?$shared_ptr@Uscheduler_interface@pplx@@@std@@XZ)". C:\sumo-0.20.0\build\msvc11\sumo\z_libmicrosim_output.lib(jsonconnect.obj) sumo
Fehler 3 error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) long __cdecl pplx::details::platform::GetCurrentThreadId(void)" (__imp_?GetCurrentThreadId@platform@details@pplx@@YAJXZ)". C:\sumo-0.20.0\build\msvc11\sumo\z_libmicrosim_output.lib(jsonconnect.obj) sumo
Fehler 4 error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: void __thiscall pplx::details::critical_section_impl::unlock(void)" (__imp_?unlock@critical_section_impl@details@pplx@@QAEXXZ)". C:\sumo-0.20.0\build\msvc11\sumo\z_libmicrosim_output.lib(jsonconnect.obj) sumo
Fehler 5 error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: void __thiscall pplx::details::critical_section_impl::lock(void)" (__imp_?lock@critical_section_impl@details@pplx@@QAEXXZ)". C:\sumo-0.20.0\build\msvc11\sumo\z_libmicrosim_output.lib(jsonconnect.obj) sumo
Fehler 6 error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall pplx::details::critical_section_impl::~critical_section_impl(void)" (__imp_??1critical_section_impl@details@pplx@@QAE@XZ)". C:\sumo-0.20.0\build\msvc11\sumo\z_libmicrosim_output.lib(jsonconnect.obj) sumo
Fehler 7 error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall pplx::details::critical_section_impl::critical_section_impl(void)" (__imp_??0critical_section_impl@details@pplx@@QAE@XZ)". C:\sumo-0.20.0\build\msvc11\sumo\z_libmicrosim_output.lib(jsonconnect.obj) sumo
Fehler 8 error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: unsigned int __thiscall pplx::details::event_impl::wait(unsigned int)" (__imp_?wait@event_impl@details@pplx@@QAEII@Z)". C:\sumo-0.20.0\build\msvc11\sumo\z_libmicrosim_output.lib(jsonconnect.obj) sumo
Fehler 9 error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: void __thiscall pplx::details::event_impl::set(void)" (__imp_?set@event_impl@details@pplx@@QAEXXZ)". C:\sumo-0.20.0\build\msvc11\sumo\z_libmicrosim_output.lib(jsonconnect.obj) sumo
Fehler 10 error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall pplx::details::event_impl::~event_impl(void)" (__imp_??1event_impl@details@pplx@@QAE@XZ)". C:\sumo-0.20.0\build\msvc11\sumo\z_libmicrosim_output.lib(jsonconnect.obj) sumo
Fehler 11 error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall pplx::details::event_impl::event_impl(void)" (__imp_??0event_impl@details@pplx@@QAE@XZ)". C:\sumo-0.20.0\build\msvc11\sumo\z_libmicrosim_output.lib(jsonconnect.obj) sumo
Fehler 12 error LNK2001: Nicht aufgelöstes externes Symbol ""private: static class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > __cdecl jsonc::connect::convert(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?convert@connect@jsonc@@CA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@4@@Z)". C:\sumo-0.20.0\build\msvc11\sumo\z_libmicrosim_output.lib(jsonconnect.obj) sumo
Fehler 13 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__accept@12". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 14 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__listen@8". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 15 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__send@16". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 16 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__gethostbyname@4". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 17 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__closesocket@4". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 18 error LNK2001: Nicht aufgelöstes externes Symbol "___WSAFDIsSet@8". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 19 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__socket@12". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 20 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__bind@12". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 21 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__recv@16". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 22 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSACleanup@0". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 23 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__setsockopt@20". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 24 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__htons@4". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 25 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 26 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__select@20". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 27 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__htonl@4". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 28 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__inet_addr@4". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 29 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAStartup@8". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 30 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__connect@12". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Fehler 31 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__ioctlsocket@12". C:\sumo-0.20.0\build\msvc11\sumo\zz_foreign_tcpip.lib(socket.obj) sumo
Wie gesagt das Project tcpip lief vorher wunderbar durch. Und die socket imp z.B. ist diese sys/socket.h