Perl6 NativeCall无法在本机库中找到符号

ryn*_*n1x 5 cmake perl6 visual-studio nativecall

我有一个使用NativeCall的模块,可以在Linux和macOS上运行,但不能在Windows上运行.当我尝试在Windows上使用该模块时,我遇到了很多错误,例如:

# Cannot locate symbol 'TinyTIFFReader_open' in native library 'tinytiff.dll'
Run Code Online (Sandbox Code Playgroud)

我使用cmake来解决所有三个操作系统上的C++依赖问题.在Linux和macOS上我可以cmake ..; make; sudo make install,在Windows上cmake -G "Visual Studio 15 2017 Win64" ..然后在Visual Studio中打开创建的".sln"进行编译.构建成功,所有三个操作系统都没有错误.

有没有人知道我需要做什么/更改以使我的模块在Windows上工作?

完整的模块位于:https://github.com/ryn1x/Graphics-TinyTIFF

tim*_*imo 5

我认为你必须给出TINYTIFFREADER_LIB_EXPORTTINYTIFFWRITER_LIB_EXPORT定义一个值(在源代码中,但可能更好地让它由构建系统传递)并且在Windows上我认为它必须是__declspec(dllexport),否则这些符号可能无法在DLL.

  • 谢谢!研究您的建议也让我找到了一个不需要修改任何代码的解决方案。在 Windows 上,您只需 `cmake -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=TRUE -DBUILD_SHARED_LIBS=TRUE -G "Visual Studio 15 2017 Win64" ..` (2认同)