无法找到Mingw,boost和运行时"过程入口点"

时间:2016-07-24 17:49:06

标签: c++ boost mingw chrono

问题

我使用mingw在Windows上使用websocketpp创建一个简单的服务器应用程序。我得到了我的代码来编译和链接成功。但是,当我启动应用程序时,它会给我以下错误窗口:

The procedure entry point _ZNSt6chrono3_V212steady_clock3nowEv could not be located in the DLL D:\work\wild_web\a.exe

我的设置

以下是我编译和链接代码的方法:

g++ -std=c++11 -march=i686 d:/work/wild_web/main.cpp -o a.exe -ID:/work/libs/boost_1_61_0 -ID:/work/websocketpp-master/websocketpp-master -LD:/work/libs/boost_1_61_0/stage/lib -lboost_system-mgw49-mt-s-1_61 -lws2_32 -lwsock32 -lboost_chrono-mgw49-mt-s-1_61

Compilation finished at Sun Jul 24 16:48:09

这就是我构建激励的方式:

b2 --build-dir=build-directory toolset=gcc --build-type=complete stage

main.cpp中:

#define _WIN32_WINNT 0x0501

#include <iostream>

#include <websocketpp/config/asio_no_tls.hpp>
#include <websocketpp/server.hpp>

#include <boost/chrono.hpp>

#include <string>
#include <sstream>
#include <vector>
#include <map>

//bunch of structs
int main() {
  //working with websocketpp
  return 0;
}

我有一种感觉,问题出现在我的#define上,第一个可能导致dll接口更改的raw。但如果我删除它,代码就不会编译:

error: '::VerSetConditionMask' has not been declared
const uint64_t condition_mask = ::VerSetConditionMask(

问题

  1. #define _WIN32_WINNT 0x0501是否会影响升级库的使用?
  2. 我是否正确连接到提升?
  3. 如果对1和2的答案是肯定的,那么我的工作是什么?

1 个答案:

答案 0 :(得分:2)

我解决了这个问题。

使用依赖性walker我发现缺少的函数应该在libstd ++ 6.dll中。显然我有两个:一个属于Windows,另一个属于MinGW。当我运行我的应用程序时,看起来就像使用了Windows。

将.exe移动到MinGW库的文件夹中就可以了。但我也发现有一个编译器标志-static-libstdc++可以用来静态链接到libstd ++ 6提供的函数。