【发布时间】:2015-10-12 18:34:52
【问题描述】:
我正在尝试将 c++ 项目从 Visual Studio 2013 移植到 ubuntu 上的 netbeans。目标是一个windows可执行文件,到目前为止我能够使用mingw作为编译器从netbeans编译windows exe文件。
该项目需要 Crypto++ 库,而我只有 Visual Studio 的 .lib 版本。要将库包含在 netbeans 中,我首先需要以 .a 格式构建 Crypto++ 库。
我不清楚我该怎么做。 我找到了有关如何使用 mingw 为 linux 构建库而不是使用 mingw 进行交叉编译的信息。提供的 GNUmakefile 不起作用。 我应该用 windows 和 mingw 设置一个 vm 并以这种方式编译库吗?或者也许使用这里建议的 qmake “hack” http://www.qtcentre.org/threads/28809-Compiling-amp-using-Crypto-with-mingw-version-of-Qt ?建议的最后一个好的 Crypto++ 版本已经很老了。这很令人困惑,移植整个项目比拥有所需的库更容易。 我愿意接受任何建议。
tldr:如何在 linux 上构建 libcryptopp.a 用于交叉编译 windows exe 项目
编辑: 例如,如果我交叉编译某些东西,那么 /usr/i686-w64-mingw32/lib/ 文件夹中有 Windows 库,例如 libuser32.a。我需要制作等效的 libcryptopp.a .. 抱歉,如果有点不清楚。 如果我只是使用答案中的步骤(以及在 wiki 中)进行构建,我最终会得到一个 libcryptopp.a 文件,但我怀疑它仅限于 linux,因为如果我在 .exe 文件中的 netbeans 中链接该库,我会交叉编译我结束到处都有对cryptopp东西的未定义引用。路径正确,我怀疑该库需要替换为与交叉编译兼容的等效 libcryptopp.a。
edit2:我试图在这里遵循答案,现在我被困在这里。在此命令之后构建cryptopp。
make CXX=/usr/bin/i686-w64-mingw32-gcc INCLUDES="-I /usr/i686-w64-mingw32/include" LIBS="-L /usr/i686-w64-mingw32/lib" CXXFLAGS="-std=c++0x"
它的许多变体我总是以这个错误结束
trap.h:26:25:致命错误:Windows.h:没有这样的文件或目录 # 包含
这让我觉得它使用正确的编译器来制作一个 .a lib 文件,以便将 windows .exe 与 lib 交叉编译。 但是我不明白缺少标题现在发生了什么..:(
另外,如果我尝试链接 lib 文件(与 Visual Studio 一起使用),我会收到很多链接错误,未定义对 cryptopp 内容的引用。
如果有人知道怎么做,我会提供象征性的啤酒(几美元的比特币)。
【问题讨论】:
-
"提供的 GNUmakefile 不起作用..." - 如果您有特定的问题,那么您应该说明它是什么。这并没有告诉我们任何有用的信息。您是否将
-a与unzip一起使用? -
是的,我确实使用 -a 解压缩。
-
转到Crypto++ User List 并提出问题。我们将把这个问题带到那里。 Stack Overflow 不适合我们需要的通信。据我所知,这种事情从来没有被讨论过。说明您正在尝试交叉编译。告诉我们您是如何进入配置的(例如您安装了哪些软件包)。告诉我们你是如何建造的。在编译器上提供一个示例调用(一个源文件,如
cryptlib.cpp)。 -
我以某种方式做到了,我用 g++ 替换了我在 op 的编辑 2 中发布的 make 字符串中的 gcc。它引发了一些有关 winsock2 的链接错误,但该库实际上已构建并且似乎可以正常工作。太糟糕了,我发现我要移植到 netbeans 的项目的很多东西在编译器之间是不兼容的,这可能是一个很大的问题。感谢您的帮助 jww :)
标签: c++ netbeans mingw cross-compiling crypto++