我想在我的程序中实现 libgcrypt 的一些功能,但它目前在 Windows、OSX 和 Linux(Arch/Xubuntu)上运行,所以我只有在能够为所有三个平台构建它的情况下才能真正做到这一点。在 OSX 和 Linux 上我没有问题。
我从 github 页面获取了libgcrypt和libgpg-error的源代码,并且我已经在 Linux 和 OSX 上成功构建并运行了这些库,所以我知道我的测试代码是有效的(我现在在 Windows 上遇到了问题带MinGW)。
我在 Xubuntu 上做了以下事情(在 Arch 上类似,但使用 pacman 而不是 apt-get):
sudo apt-get install mingw32 mingw32-runtime mingw32-binutils
获取交叉编译工具链和
git clone https://github.com/Chronic-Dev/libgcrypt.git
git clone https://github.com/Chronic-Dev/libgpg-error.git
cd libgpg-error
autoreconf -vfi
./autogen.sh --build-w32
make
sudo make install
cd ../libgcrypt
autoreconf -vfi
./autogen.sh --build-w32
make
sudo make install
构建,它成功地在 home/myuser/w32root/ 中构建了这些文件:
- libgcrypt.a
- libgcrypt.def
- libgcrypt.dll.a
- libgcrypt.la
- libgpg-error.dll.a
- libgpg-error.la
包括/
- gcrypt.h
- gcrypt-module.h
- gpg-error.h
我将这些文件带到 Windows,并尝试编译测试代码(本地命名为 main.c)
gcc main.c -o main.exe -lgcrypt
但我得到未定义的引用错误,导致我得出的结论是库没有正确链接(最初只使用 libgcrypt.a),所以我查了一些东西,发现有些库需要一组文件,如 .a, .定义,等。工作,所以我把它们都放在 C:\Mingw\lib 中,看看它是否有所作为;它没有。以下在查找要链接的库文件时也保持沉默,但没有解决未定义的引用:
gcc main.c -o main.exe -lgcrypt -lgpg-error
所以我不确定从这里去哪里。自述文件不会过多地涉及交叉编译,例如在 Windows 端复制和链接哪些文件。任何指针(我可能错过的文档?)表示赞赏!非常感谢您阅读我的文字墙。