如何从本机Windows .dll和/或.lib文件创建Cygwin兼容的库文件

时间:2014-04-11 00:31:30

标签: dll cygwin posix .a .lib

我从libspotify下载了兼容32位Windows的.dll和.lib文件。我正在处理的项目要求我使用其他在Windows上不起作用的库,但是使用Cygwin进行编译和工作。因此,我需要一种方法将.dll和/或.lib文件“转换”为兼容的Cygwin格式。这可能吗?

.dll文件不包含符号,因此Cygwin doc底部描述的建议方法不起作用。

我拥有的其他库生成了以下文件:

/usr/local/lib/{libname.la, libname.dll.a and sometimes libname.a}
/usr/local/bin/cyglibname.dll

其中libname是正确编译和安装的库的名称。如何从本机32位Windows .dll和.lib文件中获取这些文件?

更新

我尝试包含.dll文件的完整路径,而不是使用-l和-L,因为我习惯链接库,我收到以下消息:

/usr/bin/ld: i386 architecture of input file `/usr/local/test/libspotify.dll' is 
incompatible with i386:x86-64 output

似乎问题是32位与64位。任何人都知道如何解决这个问题?

另一个更新:

它通过向CFLAGS和LDFLAGS添加-m32来工作。我现在得到了一个不同的错误,我认为这与原始问题无关。

1 个答案:

答案 0 :(得分:0)

  

似乎问题是32位与64位。有人知道如何解决这个问题吗?

是;使用32位Cygwin作为依赖于第三方DLL的项目,该DLL仅以32位形式提供。不要使用64位Cygwin。

顺便说一句,Cygwin和Cygwin-64可以并排安装。 (并且可以在它们之间共享相同的主文件夹,因此您不必复制.bashrc和诸如此类的东西。)

这不是Cygwin的问题。如果使用Microsoft Visual Studio构建64位可执行文件,它也不会加载32位libspotify DLL。