【发布时间】:2012-03-15 04:19:22
【问题描述】:
我正在尝试为 Windows 构建 CGAL,以便在 Visual Studio 2010 下的项目中使用。CGAL 需要 GMP 和 MPFR 库并在分发中提供它们。但是,它以 lib+dll 包的形式提供它们,而我希望它们以单个 .lib 文件的形式静态编译。
所以现在我正在尝试将 GMP 和 MPFR 构建为 windows 下的静态库。正如here 所建议的那样,我正在为此目的使用cygwin。调用configure 和make 后,我有带有.a 扩展名的输出库和额外的.la 文件。我不太了解 Unix 的静态库,所以我建议它与 .lib 相同,只是扩展名不同。我将它重命名为 .lib 并链接到我的项目 - 它非常适合。
第一个问题:我这样做对吗? .a 和 .lib 文件真的一样吗?我看到了this 的问题,但觉得它不够用。
然后问题出现了:我有
error LNK2019: unresolved external symbol ___getreent referenced in function ___gmp_default_reallocate
似乎某些 cygwin 函数未链接到导致 gmp.lib。我发现here,getreent 可能是从libcygwin.a 导出的。所以我把它复制到libcygwin.lib 并链接到我的项目。毫不奇怪,我收到以下错误:
error LNK2005: _strcpy already defined in libcygwin.lib(t-d001719.o) in libcmtd.lib(strcat.obj)
当然,我不知道在这个库中声明了哪些函数以及如何声明,并且似乎 strcpy 与 Visual Studio 中的一个冲突。我真正想要发生的是gmp.lib 会足够聪明地静态链接这个函数。所以,
第二个问题:如何强制GMP链接库依赖? 或如何在不使用cygwin的情况下为windows正确构建GMP?
【问题讨论】:
标签: c++ windows dependencies cygwin