添加nuget包后出现多个Link2001错误

时间:2014-04-29 13:03:32

标签: c++ lnk2001

我希望我发布另一个问题,但我认为理解我的问题非常重要。所以我正在开发源项目Sumo并尝试添加一个通过http以json格式发送数据的类。因此,在我开始工作之前,项目编译并构建了exe。然后我添加了这两个文件:

#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

我的代码:

#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;
    }
}

所以该项目之前已经使用过xerces,就像我说它工作正常一样。现在,当我添加nuget包casablanca并尝试构建它时,我得到了一些与casblanca类和xerces的LNK错误。好吧,我添加了prag,a到libs,这些错误消失了。相反,我现在再次获得LNK错误,甚至更多在同一个项目和另一个项目..我想知道我是c +的新手,但现在我完全失去了,因为为什么他现在有问题,他已经建好了,然后再添加该项目?

这就是错误现在和现在我真的失去了因为甚至像std:basic_string LNK错误......

29>z_libmicrosim_output.lib(jsonconnect.obj) : 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)".
29>z_libmicrosim_output.lib(jsonconnect.obj) : 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)".
29>z_libmicrosim_output.lib(jsonconnect.obj) : error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) long __cdecl pplx::details::platform::GetCurrentThreadId(void)" (__imp_?GetCurrentThreadId@platform@details@pplx@@YAJXZ)".
29>z_libmicrosim_output.lib(jsonconnect.obj) : 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)".
29>z_libmicrosim_output.lib(jsonconnect.obj) : 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)".
29>z_libmicrosim_output.lib(jsonconnect.obj) : 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)".
29>z_libmicrosim_output.lib(jsonconnect.obj) : 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)".
29>z_libmicrosim_output.lib(jsonconnect.obj) : 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)".
29>z_libmicrosim_output.lib(jsonconnect.obj) : 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)".
29>z_libmicrosim_output.lib(jsonconnect.obj) : 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)".
29>z_libmicrosim_output.lib(jsonconnect.obj) : 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)".
29>z_libmicrosim_output.lib(jsonconnect.obj) : 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)".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__accept@12".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__listen@8".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__send@16".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__gethostbyname@4".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__closesocket@4".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "___WSAFDIsSet@8".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__socket@12".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__bind@12".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__recv@16".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSACleanup@0".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__setsockopt@20".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__htons@4".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__select@20".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__htonl@4".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__inet_addr@4".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAStartup@8".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__connect@12".
29>zz_foreign_tcpip.lib(socket.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__ioctlsocket@12".

我真的迷失在这里,任何帮助都会非常感激。从我读到的关于错误的其他主题我没有真正得到它因为在我添加该项目之前构建工作的所有内容都已定义?有没有像圆圈一样的东西?

1 个答案:

答案 0 :(得分:5)

您可能已经解决了这个问题,因为它已经很老了,但这可能对其他人有所帮助。问题可能是由于Visual Studio 2012中项目属性中的错误。

如果您前往:

项目属性&gt; C / C ++&gt;预处理器&gt;预处理器定义

并添加标志:

<强> _NO_ASYNCRTIMP;

这可以防止编译器尝试从DLL中查找C ++ REST SDK函数。它应该解决你的pplx链接错误。

其他一些值得注意的要点:

  • 确保您为项目使用v110二进制文件,因为它们适用于Visual Studio 2012
  • 您可能会在互联网上遇到一些不明智的建议,以禁用wchar_t&#34;作为本机类型。这通常是一个坏主意,因为wchar_t是本机类型,而C ++ REST SDK依赖于它。
  • 如果来自C ++ REST SDK的v110二进制文件没有正确链接,请尝试Windows XP版本(v110_xp)