在单个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吗?)。
答案 0 :(得分:0)
据我所知:
即使要链接DLL,你需要LIB文件,这个LIB文件与DLL一起生成,并包含对DLL的引用。
与某些boost库的静态链接在C ++ / CLI中不起作用,因为它们依赖于静态TLS(线程本地存储)。已知Boost.Thread具有此依赖性,Boost.Log可能使用Boost.Thread。如果你有单线程代码,你可以试试BOOST_LOG_NO_THREADS。