我一直试图让这个测试程序编译
#include <botan/botan.h>
int main()
{
Botan::LibraryInitializer init;
}
我从网站上下载了图书馆资源。我运行了configure.py,运行正常。 然后我尝试运行MinGW-make
这是我得到的错误
c:\Botan-1.11.7>mingw32-make
g++ -m64 -pthread -fPIC -fvisibility=hidden -std=c++11 -D_REENTRANT -fstack-pro
tector -O3 -momit-leaf-frame-pointer -Wall -Wextra -Wstrict-aliasing -Wstrict-ov
erflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual -Wold-s
tyle-cast -Wzero-as-null-pointer-constant -Ibuild\include -c C:\Botan-1.11.7\src
\lib\algo_base\scan_name.cpp -o build\obj\lib\src_lib_algo_base_scan_name.obj
C:\Botan-1.11.7\src\lib\algo_base\scan_name.cpp:1:0: warning: -fPIC ignored for
target (all code is position independent) [enabled by default]
C:\Botan-1.11.7\src\lib\algo_base\scan_name.cpp:1:0: sorry, unimplemented: 64-bi
t mode not compiled in
mingw32-make: *** [build\obj\lib\src_lib_algo_base_scan_name.obj] Error 1
我搜索了Google和我能找到的任何可用论坛。我在他们网站的隐藏文件夹中找到了用于Windows的预构建库。但是,软件包包含lib和dll文件,而不是MinGW所需的.a文件。我尝试使用创建.a文件的程序LIB2A。我已将此文件添加到我的code :: blocks链接器选项中。我还包括了include文件夹。
当我尝试编译时,我收到此错误。
C:\botan\include\botan\init.h|41|undefined reference to `_imp___ZN5Botan18LibraryInitializer10initializeERKSs'|
好像它看不到带有函数定义的库,但我迷失在哪里。
答案 0 :(得分:0)
mingw32-make设置了-m64标志,这意味着它正在尝试构建一个64位的库。要构建64位库,您需要获得MinGW-w64。
当你运行configure.py时,它可能会设置你的MakeFile来构建一个64位的库。您需要检查其输出中设置的选项。这包括构建32位或64位的选项。无论哪种方式,你都需要一些变体:python configure.py --os = mingw --cc = gcc
这个问题有类似的错误,建议使用MinGW-w64,它允许你构建一个64位的库:Building 64 bit dll with MinGW 32 bit in Eclipse
为了使用mingw32-make命令行构建,您还需要将MinGW-w64 bin目录添加到Windows路径中,并可能从您的路径中删除Code :: Blocks打包的MinGW以避免冲突。你仍然会使用mingw32-make来构建MinGW-w64的库;即使它被命名为mingw32-make,它也会构建64位。
如果您决定构建64位库,则还需要构建64位应用程序,因此您需要为Code :: Blocks设置MinGW-w64。要在Code :: Blocks中设置MinGW-w64,请参阅此问题:Setting up MingW and Code::Blocks in Windows 8 64 bit。