Visual Studio 2017 ARM交叉编译链接器崩溃

时间:2018-08-19 00:39:12

标签: c++ visual-studio visual-c++ arm cross-compiling

所以我一直在为树莓派开发一个项目。但是为了方便起见,我想使用Visual Studio 2017进行构建。它是基于插件的,因此插件实现了一个接口并导出了将实例返回给实现类的函数。我遇到的问题是编译器崩溃,仅当我尝试导出该函数时才会发生。

extern "C" Plugin __declspec(dllexport) *CreatePlugin(Data *r);

这是插件必须实现以返回其“ Plugin”接口实现的功能的声明。

MSVC编译器给我以下错误消息:

1>   Bibliothek "build\Debug\Raspberry\libSMH.so" und Objekt "build\Debug\Raspberry\libSMH.exp" werden erstellt.
1>
1>LINK : fatal error LNK1000: Internal error during IMAGE::BuildImage
1>
1>  Version 14.15.26726.0
1>
1>  ExceptionCode            = C0000005
1>  ExceptionFlags           = 00000000
1>  ExceptionAddress         = 0F20CC4E (0F200000) "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\arm\VCRUNTIME140.dll"
1>  NumberParameters         = 00000002
1>  ExceptionInformation[ 0] = 00000001
1>  ExceptionInformation[ 1] = FEE90000
1>
1>CONTEXT:
1>  Eax    = 00FE5678  Esp    = 006FEE34
1>  Ebx    = 00FE55F8  Ebp    = 006FEE60
1>  Ecx    = 00000080  Esi    = 00FE55F8
1>  Edx    = 00000080  Edi    = FEE90000
1>  Eip    = 0F20CC4E  EFlags = 00010247
1>  SegCs  = 00000023  SegDs  = 0000002B
1>  SegSs  = 0000002B  SegEs  = 0000002B
1>  SegFs  = 00000053  SegGs  = 0000002B
1>  Dr0    = 00000000  Dr3    = 00000000
1>  Dr1    = 00000000  Dr6    = 00000000
1>  Dr2    = 00000000  Dr7    = 00000000

如果我从上面的函数声明中删除__declspec(dllexport),则不会发生这种情况。

任何人都没有交叉编译ARM共享库的经验,并且可能对如何解决这个问题有想法吗?

1 个答案:

答案 0 :(得分:0)

武装什么?

如果您要针对ARM Windows进行构建,那么它对于树莓派上的Win10 IoT和Windows Phone都可以很好地运行。我没有使用__declspec(dllexport),而是使用模块定义文件来控制导出。设置为配置属性/链接器/输入/模块定义文件。有关更多信息,请参见this article

如果您要针对ARM Linux或Android或其他操作系统进行构建,我怀疑VC ++编译器是否支持该目标。请改用clang,它是VS2017的可选组件。