所以我一直在为树莓派开发一个项目。但是为了方便起见,我想使用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共享库的经验,并且可能对如何解决这个问题有想法吗?
答案 0 :(得分:0)
武装什么?
如果您要针对ARM Windows进行构建,那么它对于树莓派上的Win10 IoT和Windows Phone都可以很好地运行。我没有使用__declspec(dllexport)
,而是使用模块定义文件来控制导出。设置为配置属性/链接器/输入/模块定义文件。有关更多信息,请参见this article。
如果您要针对ARM Linux或Android或其他操作系统进行构建,我怀疑VC ++编译器是否支持该目标。请改用clang,它是VS2017的可选组件。