动态链接到Boost DLL

时间:2017-10-30 23:42:27

标签: c++ boost visual-studio-2015

在单个Visual Studio 2015解决方案中,我有一个WPF应用程序,一个“包装”本机C ++项目(编译为静态LIB)的C ++ / CLI DLL。一切都很顺利,直到:

我将Boost Log添加到本机C ++项目中。一切都很快乐编译,但我得到一个BadFormatException消息'<>尝试运行WPF应用程序时,它不是有效的Win32应用程序。

我在另一个答案中发现,我需要更改为使用Boost的DLL版本并添加“BOOST_ALL_DYN_LINK”。我还确认C ++ / CLI和本机C ++项目都设置为编译为Win32,WPF项目编译为x86。

如果我将原生C ++项目保留为LIB,那么所有内容都会编译,但我仍然会得到相同的BadFormatException。我已将所需的Boost DLL复制到WPF应用程序Debug目录(我使用BOOST_LIB_DIAGNOSTIC来确认我需要哪些库)。

如果我将原生C ++项目更改为DLL,它会编译,但C ++ / CLI项目不再链接,因为它找不到LIB文件(现在不应该查找DLL吗?)。

  1. 原生C ++项目现在应该是DLL吗?如果是这样,我如何让C ++ / CLI项目正确链接?
  2. 如果我将本机C ++项目保留为LIB,它应该可行吗?

1 个答案:

答案 0 :(得分:0)

据我所知:

  1. 即使要链接DLL,你需要LIB文件,这个LIB文件与DLL一起生成,并包含对DLL的引用。

  2. 与某些boost库的静态链接在C ++ / CLI中不起作用,因为它们依赖于静态TLS(线程本地存储)。已知Boost.Thread具有此依赖性,Boost.Log可能使用Boost.Thread。如果你有单线程代码,你可以试试BOOST_LOG_NO_THREADS。