我正在尝试将一个C++项目从Visual Studio 2013移植到Ubuntu上的NetBeans。目标是Windows可执行文件,目前我能够使用mingw作为编译器从NetBeans编译Windows可执行文件。
该项目需要使用Crypto++库,我只有Visual Studio的.lib版本。要在NetBeans中包含库,我首先需要将Crypto++库构建为.a格式。
我不清楚应该如何做到这一点。我找到了关于使用mingw在Linux上构建库的信息,但没有关于使用mingw进行交叉编译的信息。提供的GNUmakefile不起作用。我应该设置一个带有Windows和mingw的虚拟机来编译库吗?或者像这里http://www.qtcentre.org/threads/28809-Compiling-amp-using-Crypto-with-mingw-version-of-Qt所建议的那样使用qmake“hack”?那里推荐的最新的好的Crypto++版本非常旧。这很令人困惑,整个项目的移植比需要的库更容易。我接受任何建议。
tldr:如何在Linux上构建libcryptopp.a以便交叉编译Windows可执行文件项目
编辑: 例如,如果我交叉编译某些内容,/usr/i686-w64-mingw32/lib/文件夹中会有Windows库,例如libuser32.a。我需要制作相等的libcryptopp.a.. 抱歉如果不太清楚。如果我只是按照答案(和维基)中的步骤构建,我最终会得到一个libcryptopp.a文件,但我怀疑它仅限于Linux,因为如果我在NetBeans中连接该库到正在交叉编译的.exe文件中,我会发现到处都是未定义的对cryptopp相关内容的引用。路径是正确的,我怀疑该库需要用与交叉编译兼容的等效libcryptopp.a替换。
编辑2:我试图按照下面的答案进行操作,现在卡在这里了。执行此命令以构建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:没有那个文件或目录 # include
这使我认为它正在使用正确的编译器制作用于交叉编译Windows .exe的库的.a文件。 但是我不明白现在发生了什么,缺少头文件..:(
此外,如果我尝试链接库文件(与Visual Studio一起使用),我会得到很多链接错误,未定义对cryptopp的引用。
如果有人知道如何解决问题,我将提供象征性啤酒(几美元的比特币)。
unzip
命令中使用了-a
选项? - jwwcryptlib.cpp
)。 - jww